diff --git a/CHANGELOG.md b/CHANGELOG.md index f8f42314..1328ed48 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,42 @@ # 版本发布日志 +## 2.2406.4-20240627 + +- 更新 关闭crontask任务异常TaskHandShakeToNF +- 更新 参数配置IMS参数DS System +- 更新 参数配置MME默认参数属性 +- 更新 字典多语言翻译,部门/系统名/初始密码备注 +- 修复 网元许可检查状态响应nil字符串 +- 修复 MML-UPF标准版5002数据行约有400+ +- 优化 UDM CN Type可选类型字典数据 +- 移除 ims命令执行的sudo前缀 + +## 2.2406.3-20240619 + +- 更新 参数配置MME参数默认值 +- 修复 角色数据权限范围配置示例系统日志区分 +- 优化 接口操作日志敏感属性掩码token头 +- 优化 用户岗位编辑权限 +- 优化 UE事件MME类型结果保持和AMF一致 +- 移除 mmeUE事件类型的字典数据 + +## 2.2406.2-20240617 + +- 修复 总览仪表盘用户活动数据不显示问题 +- 修复 旧Session过期查询CPU占用率过高 +- 优化 SMF参数配置支持cdr相关配置 +- 优化 UDM鉴权签约数据获取和重加载的速度 +- 修复 抓包操作失败ssh异常问题 + +## 2.2406.1-20240612 + +- 新增 快速开站和网元快速安装功能 +- 新增 SMF CDR数据列表查询展示 +- 新增 IMS CDR和AMF UE数据支持导出到表格文件 +- 优化 UPF、MME、IMS、SMF参数配置项 +- 优化 软件管理和许可证管理功能页面 +- 修复 网元日志文件读取下载失败问题 + ## 2.2405.1-20240511 - 优化 使用新的黄金指标数据表查询统计kpi diff --git a/README.md b/README.md index 18aa6621..7cd472fd 100644 --- a/README.md +++ b/README.md @@ -18,19 +18,34 @@ bind 0.0.0.0 port 6379 # 安全设置 protected-mode yes -requirepass "" +requirepass "helloearth" +# 查看主备 +info replication # 从节点只能读取数据,不能直接写入数据 +# replicaof是新版本的命令,旧版本是slaveof命令 slaveof 192.168.114.114 6379 +replicaof 192.168.114.114 6379 +masterauth "helloearth" # 允许从节点进行读写操作 replica-read-only no ``` -## 版本发布空间 +## 一些服务器 +```txt +# 版本发布空间 \\192.168.1.205\share\release\omc + +# 研发git 192.168.1.120 altouser/a1t0U53r +# 默认IOS镜像用户和密码 +agtuser/admin123 +manager/admin123 +omcuser/a9tU53r +``` + ## 开发 ```sh @@ -40,7 +55,7 @@ cd ./restagent go mod download # 调试启动 -go run restagent.go -c ./restagent/etc/restconf.yaml --env local +go run restagent.go -c ./etc/restconf.yaml --env local # 打包命名 restagent go build -ldflags="-s -w" -o restagent @@ -53,7 +68,12 @@ go env -w GOOS=linux go env -w GOOS=windows -go build -o restagent -v -ldflags "-X 'be.ems/lib/global.Version=2.2311.8' -X 'be.ems/lib/global.BuildTime=`date`' -X 'be.ems/lib/global.GoVer=`go version`'" +cd ./restagent + +go build -o restagent -v -ldflags="-s -w -X 'be.ems/lib/global.Version=2.240620.1' -X 'be.ems/lib/global.BuildTime=`date`' -X 'be.ems/lib/global.GoVer=`go version`'" + +go build -o crontask -v -ldflags="-s -w -X 'be.ems/lib/global.Version=2.240620.1' -X 'be.ems/lib/global.BuildTime=`date`' -X 'be.ems/lib/global.GoVer=`go version`'" + ``` ## 安装 diff --git a/captrace/makefile b/captrace/makefile index 2ccb3b37..e870a844 100644 --- a/captrace/makefile +++ b/captrace/makefile @@ -14,7 +14,7 @@ BINNAME = captrace .PHONY: build $(BINNAME) build $(BINNAME): - go build -o $(BINNAME) -v -ldflags "-X '$(LIBDIR)/global.Version=$(VERSION)' \ + go build -o $(BINNAME) -v -ldflags "-s -w -X '$(LIBDIR)/global.Version=$(VERSION)' \ -X '$(LIBDIR)/global.BuildTime=`date`' \ -X '$(LIBDIR)/global.GoVer=`go version`'" diff --git a/config/etc/default/capconf.yaml b/config/etc/default/capconf.yaml index 717352b3..a5b01a90 100644 --- a/config/etc/default/capconf.yaml +++ b/config/etc/default/capconf.yaml @@ -3,7 +3,7 @@ # duration: saved days, default is 30 days logger: file: /usr/local/omc/log/captrace.log - level: trace + level: warn duration: 24 count: 10 diff --git a/config/etc/default/crontask.yaml b/config/etc/default/crontask.yaml index a8ed309c..197aa127 100644 --- a/config/etc/default/crontask.yaml +++ b/config/etc/default/crontask.yaml @@ -3,7 +3,7 @@ # duration: saved days, default is 30 days logger: file: /usr/local/omc/log/crontask.log - level: debug + level: warn duration: 24 count: 90 diff --git a/config/etc/default/omc.conf b/config/etc/default/omc.conf new file mode 100644 index 00000000..00f89090 --- /dev/null +++ b/config/etc/default/omc.conf @@ -0,0 +1,4 @@ +## Command Configuration +VENDORS=CoreNet_EMS + +## Other diff --git a/config/etc/default/restconf.yaml b/config/etc/default/restconf.yaml index 21830b79..dbc3cd5a 100644 --- a/config/etc/default/restconf.yaml +++ b/config/etc/default/restconf.yaml @@ -4,7 +4,7 @@ # count: rotation count of log, default is 30 rotation logger: file: /usr/local/omc/log/restagent.log - level: debug + level: warn duration: 24 count: 90 @@ -73,7 +73,7 @@ mml: port2: 5002 sleep: 200 deadLine: 10 - sizeRow: 100 + sizeRow: 600 sizeCol: 128 bufferSize: 65535 user: admin @@ -82,7 +82,7 @@ mml: # NE config ne: - user: manager + user: omcuser etcdir: /usr/local/etc bindir: /usr/local/bin omcdir: /usr/local/omc diff --git a/config/etc/default/sshsvc.yaml b/config/etc/default/sshsvc.yaml index 94c19a85..9c4f530a 100644 --- a/config/etc/default/sshsvc.yaml +++ b/config/etc/default/sshsvc.yaml @@ -4,7 +4,7 @@ # count: rotation count of log, default is 30 rotation logger: file: /usr/local/omc/log/sshsvc.log - level: debug + level: warn duration: 24 count: 30 diff --git a/config/param/ims_param_config.yaml b/config/param/ims_param_config.yaml index 12d79084..8a9fbef6 100644 --- a/config/param/ims_param_config.yaml +++ b/config/param/ims_param_config.yaml @@ -2,283 +2,285 @@ ims: system: display: "System" list: - - name: "label" - type: "string" - value: "ims-core" - access: "read-write" - filter: '' - display: "Label" - comment: "" - - name: "hplmnMCC" - type: "string" - value: "001" - access: "read-only" - filter: '' - display: "HPLMN MCC" - comment: "" - - name: "hplmnMNC" - type: "string" - value: "01" - access: "read-only" - filter: '' - display: "HPLMN MNC" - comment: "" - - name: "LocalNetworkIPv4" - type: "ipv4" - value: "172.16.5.110" - access: "read-write" - filter: '' - display: "Local Network IPv4" - comment: "" - - name: "serviceIP" - type: "ipv4" - value: "172.16.5.110" - access: "read-write" - filter: '' - display: "Public Network IPv4" - comment: "" - - name: "serviceIPv6" - type: "ipv6" - value: "" - access: "read-write" - filter: '' - display: "Public Network IPv6" - comment: "" - - name: "domainName1" - type: "string" - value: "ims.mnc001.mcc001.3gppnetwork.org" - access: "read-only" - filter: '' - display: "Domain Name 1" - comment: "" - - name: "domainName2" - type: "string" - value: "" - access: "read-only" - filter: '' - display: "Domain Name 2" - comment: "" - - name: "domainName3" - type: "string" - value: "" - access: "read-only" - filter: '' - display: "Domain Name 3" - comment: "" - - name: "domainName4" - type: "string" - value: "" - access: "read-only" - filter: '' - display: "Domain Name 4" - comment: "" - - name: "multiDomainInd" - type: "bool" - value: 'false' - access: "read-write" - filter: 'false;true;' - display: "MultiDomain Indicator" - comment: "" - - name: "transcodeInd" - type: "bool" - value: 'false' - access: "read-write" - filter: 'false;true;' - display: "Transcode Indicator" - comment: "" - - name: "multiIPStackInd" - type: "bool" - value: 'false' - access: "read-write" - filter: 'false;true;' - display: "MultiIPStack Indicator" - comment: "" - - name: "registerTimer" - type: "int" - value: "7200" - access: "read-write" - filter: '120-1000000' - display: "Register Timer" - comment: "" - - name: "maxCallDuration" - type: "int" - value: "43200" - access: "read-write" - filter: '1800-1000000' - display: "Max Call Duration" - comment: "" - - name: "dispatchSystemInd" - type: "bool" - value: 'false' - access: "read-write" - filter: 'false;true;' - display: "Dispatch System Indicator" - comment: "" - - name: "dispatchSystemIP" - type: "ipv4" - value: "" - access: "read-write" - filter: '' - display: "Dispatch System IPv4" - comment: "" - - name: "internalSMSInd" - type: "bool" - value: 'false' - access: "read-write" - filter: 'false;true;' - display: "Internal SMS Indicator" - comment: "" - - name: "internalCDRInd" - type: "bool" - value: 'false' - access: "read-write" - filter: 'false;true;' - display: "Internal CDR Indicator" - comment: "" - - name: "internalKPIInd" - type: "bool" - value: 'false' - access: "read-write" - filter: 'false;true;' - display: "Internal KPI Indicator" - comment: "" - - name: "pcfIP" - type: "ipv4" - value: "172.16.5.140" - access: "read-write" - filter: '' - display: "PCF IP Address" - comment: "" + - name: "label" + type: "string" + value: "ims-core" + access: "read-write" + filter: "" + display: "Label" + comment: "" + - name: "hplmnMCC" + type: "string" + value: "001" + access: "read-only" + filter: "" + display: "HPLMN MCC" + comment: "" + - name: "hplmnMNC" + type: "string" + value: "01" + access: "read-only" + filter: "" + display: "HPLMN MNC" + comment: "" + - name: "LocalNetworkIPv4" + type: "ipv4" + value: "172.16.5.110" + access: "read-write" + filter: "" + display: "Local Network IPv4" + comment: "" + - name: "serviceIP" + type: "ipv4" + value: "172.16.5.110" + access: "read-write" + filter: "" + display: "Public Network IPv4" + comment: "" + - name: "serviceIPv6" + type: "ipv6" + value: "" + access: "read-write" + filter: "" + display: "Public Network IPv6" + comment: "" + - name: "domainName1" + type: "string" + value: "ims.mnc001.mcc001.3gppnetwork.org" + access: "read-only" + filter: "" + display: "Domain Name 1" + comment: "" + - name: "domainName2" + type: "string" + value: "" + access: "read-only" + filter: "" + display: "Domain Name 2" + comment: "" + - name: "domainName3" + type: "string" + value: "" + access: "read-only" + filter: "" + display: "Domain Name 3" + comment: "" + - name: "domainName4" + type: "string" + value: "" + access: "read-only" + filter: "" + display: "Domain Name 4" + comment: "" + - name: "multiIPStackInd" + type: "bool" + value: "false" + access: "read-write" + filter: '{"0":"false", "1":"true"}' + display: "MultiIPStack Indicator" + comment: "" + - name: "registerTimer" + type: "int" + value: "7200" + access: "read-write" + filter: "120~1000000" + display: "Register Timer" + comment: "" + - name: "maxCallDuration" + type: "int" + value: "43200" + access: "read-write" + filter: "1800~1000000" + display: "Max Call Duration" + comment: "" + - name: "internalSMSInd" + type: "bool" + value: "false" + access: "read-write" + filter: '{"0":"false", "1":"true"}' + display: "Internal SMS Indicator" + comment: "" + - name: "internalCDRInd" + type: "bool" + value: "false" + access: "read-write" + filter: '{"0":"false", "1":"true"}' + display: "Internal CDR Indicator" + comment: "" + - name: "internalKPIInd" + type: "bool" + value: "false" + access: "read-write" + filter: '{"0":"false", "1":"true"}' + display: "Internal KPI Indicator" + comment: "" + - name: "pcfIP" + type: "ipv4" + value: "172.16.5.160" + access: "read-write" + filter: "" + display: "PCF IP Address" + comment: "" plmn: display: "PLMN List" array: - - name: "index" - type: "int" - value: "0" - access: "read-only" - filter: '0~15' - display: "Index" - comment: "0~15" - - name: "mcc" - type: "regex" - value: '001' - access: "read-write" - filter: '^[0-9]{3}$' - display: "MCC" - comment: "" - - name: "mnc" - type: "regex" - value: '01' - access: "read-write" - filter: '^[0-9]{2,3}$' - display: "MNC" - comment: "" - - name: "domain" - type: "string" - value: "ims.mnc001.mcc001.3gppnetwork.org" - access: "read-only" - filter: '0~128' - display: "Domain" - comment: "" + - name: "index" + type: "int" + value: "0" + access: "read-only" + filter: "0~15" + display: "Index" + comment: "0~15" + - name: "mcc" + type: "regex" + value: "001" + access: "read-write" + filter: "^[0-9]{3}$" + display: "MCC" + comment: "" + - name: "mnc" + type: "regex" + value: "01" + access: "read-write" + filter: "^[0-9]{2,3}$" + display: "MNC" + comment: "" + - name: "domain" + type: "string" + value: "ims.mnc001.mcc001.3gppnetwork.org" + access: "read-only" + filter: "0~128" + display: "Domain" + comment: "" mmtel_dialplan: display: "MMTEL Dialplan" array: - - name: "index" - type: "int" - value: "0" - access: "read-only" - filter: '0~15' - display: "Index" - comment: "0~15" - - name: "naName" - type: "string" - value: "" - access: "read-only" - filter: '0~128' - display: "NaName" - comment: "" - - name: "title" - type: "string" - value: "" - access: "read-write" - filter: '0~128' - display: "Title" - comment: "" - - name: "method" - type: "string" - value: "0" - access: "read-write" - filter: '0-2' - display: "Method" - comment: "" - - name: "prefix" - type: "string" - value: "" - access: "read-write" - filter: '0~128' - display: "Prefix" - comment: "" - - name: "start" - type: "string" - value: "" - access: "read-write" - filter: '0~128' - display: "Start" - comment: "" - - name: "end" - type: "string" - value: "" - access: "read-write" - filter: '0~128' - display: "End" - comment: "" - - name: "attrib" - type: "string" - value: "" - access: "read-write" - filter: '0~128' - display: "Attrib" - comment: "" - - name: "numberLen" - type: "string" - value: "" - access: "read-write" - filter: '0~128' - display: "Number Len" - comment: "" - - name: "rsc" - type: "string" - value: "" - access: "read-write" - filter: '0~128' - display: "Rsc" - comment: "" - - name: "e164Nai" - type: "string" - value: "" - access: "read-write" - filter: '0~128' - display: "E164 Nai" - comment: "" - - name: "e164Delete" - type: "string" - value: "" - access: "read-write" - filter: '0~128' - display: "E164 Delete" - comment: "" - - name: "e164Insert" - type: "string" - value: "" - access: "read-write" - filter: '0~128' - display: "E164 Insert" - comment: "" - - name: "adminState" - type: "int" - value: 0 - access: "read-write" - filter: '0~1' - display: "Admin State" - comment: "Enable: 0,Close 1,Open" - enum: [0, 1] \ No newline at end of file + - name: "index" + type: "int" + value: "0" + access: "read-only" + filter: "0~15" + display: "Index" + comment: "0~15" + - name: "naName" + type: "string" + value: "" + access: "read-only" + filter: "0~128" + display: "NaName" + comment: "" + - name: "title" + type: "string" + value: "" + access: "read-write" + filter: "0~128" + display: "Title" + comment: "" + - name: "method" + type: "string" + value: "0" + access: "read-write" + filter: "0-2" + display: "Method" + comment: "" + - name: "prefix" + type: "string" + value: "" + access: "read-write" + filter: "0~128" + display: "Prefix" + comment: "" + - name: "start" + type: "string" + value: "" + access: "read-write" + filter: "0~128" + display: "Start" + comment: "" + - name: "end" + type: "string" + value: "" + access: "read-write" + filter: "0~128" + display: "End" + comment: "" + - name: "attrib" + type: "string" + value: "" + access: "read-write" + filter: "0~128" + display: "Attrib" + comment: "" + - name: "numberLen" + type: "string" + value: "" + access: "read-write" + filter: "0~128" + display: "Number Len" + comment: "" + - name: "rsc" + type: "string" + value: "" + access: "read-write" + filter: "0~128" + display: "Rsc" + comment: "" + - name: "e164Nai" + type: "string" + value: "" + access: "read-write" + filter: "0~128" + display: "E164 Nai" + comment: "" + - name: "e164Delete" + type: "string" + value: "" + access: "read-write" + filter: "0~128" + display: "E164 Delete" + comment: "" + - name: "e164Insert" + type: "string" + value: "" + access: "read-write" + filter: "0~128" + display: "E164 Insert" + comment: "" + - name: "adminState" + type: "enum" + value: "0" + access: "read-write" + filter: '{"0":"Close", "1":"Open"}' + display: "Admin State" + comment: "Enable: Close/Open" + ds_system: + display: "DS System" + list: + - name: "dispatchSystemInd" + type: "bool" + value: "false" + access: "read-write" + filter: '{"0":"false", "1":"true"}' + display: "Dispatch System Indicator" + comment: "" + - name: "transcodeInd" + type: "bool" + value: "false" + access: "read-write" + filter: '{"0":"false", "1":"true"}' + display: "Transcode Indicator" + comment: "" + - name: "dispatchSystemIP" + type: "ipv4" + value: "1.0.0.1" + access: "read-write" + filter: "" + display: "Dispatch System IPv4" + comment: "" + - name: "dispatchSystemPort" + type: "int" + value: "5060" + access: "read-write" + filter: "" + display: "Dispatch System Port" + comment: "" diff --git a/config/param/mme_param_config.yaml b/config/param/mme_param_config.yaml index 1674bf80..5ddd5caa 100644 --- a/config/param/mme_param_config.yaml +++ b/config/param/mme_param_config.yaml @@ -2,280 +2,294 @@ mme: system: display: "System Config" list: - - name: "csfbEnabled" - type: "bool" - value: "0" - access: "read-write" - filter: '{"0":"false","1":"true"}' - display: "CSFB Enabled" - comment: '{"0":"false","1":"true"}' - - name: "volteEnabled" - type: "bool" - value: "0" - access: "read-write" - filter: '{"0":"false","1":"true"}' - display: "VoLTE Enabled" - comment: '{"0":"false","1":"true"}' - - name: "s1MmeIp" - type: "string" - value: "192.168.1.179" - access: "read-write" - filter: '0~64' - display: "S1 MME IP" - comment: "0~64" - - name: "s1MmePort" - type: "int" - value: "36412" - access: "read-only" - filter: "0~65535" - display: "S1 MME Port" - comment: "0~65535" - - name: "s11MmeIp" - type: "string" - value: "192.168.1.179" - access: "read-write" - filter: '0~64' - display: "S11 MME IP" - comment: "0~64" - - name: "s11MmePort" - type: "int" - value: "2123" - access: "read-write" - filter: "0~65535" - display: "S11 MME Port" - comment: "0~65535" - - name: "s10MmeIp" - type: "string" - value: "192.168.1.178" - access: "read-write" - filter: '0~64' - display: "S10 MME IP" - comment: "0~64" - - name: "s10MmePort" - type: "int" - value: "2123" - access: "read-write" - filter: "0~65535" - display: "S10 MME Port" - comment: "0~65535" - - name: "sgsMmeIp" - type: "string" - value: "192.168.1.179" - access: "read-write" - filter: '0~64' - display: "SGs MME IP" - comment: "0~64" - - name: "sgsMmePort" - type: "int" - value: "29118" - access: "read-only" - filter: "0~65535" - display: "SGs MME Port" - comment: "0~65535" + - name: "csfbEnabled" + type: "bool" + value: "false" + access: "read-write" + filter: '{"0":"false","1":"true"}' + display: "CSFB Enabled" + comment: "true|false" + - name: "volteEnabled" + type: "bool" + value: "false" + access: "read-write" + filter: '{"0":"false","1":"true"}' + display: "VoLTE Enabled" + comment: "true|false" + - name: "s1MmeIp" + type: "string" + value: "192.168.1.179" + access: "read-write" + filter: "0~64" + display: "S1 MME IP" + comment: "0~64" + - name: "s1MmePort" + type: "int" + value: "36412" + access: "read-only" + filter: "0~65535" + display: "S1 MME Port" + comment: "0~65535" + - name: "s11MmeIp" + type: "string" + value: "192.168.1.179" + access: "read-write" + filter: "0~64" + display: "S11 MME IP" + comment: "0~64" + - name: "s11MmePort" + type: "int" + value: "2123" + access: "read-write" + filter: "0~65535" + display: "S11 MME Port" + comment: "0~65535" + - name: "s10MmeIp" + type: "string" + value: "192.168.1.178" + access: "read-write" + filter: "0~64" + display: "S10 MME IP" + comment: "0~64" + - name: "s10MmePort" + type: "int" + value: "2123" + access: "read-write" + filter: "0~65535" + display: "S10 MME Port" + comment: "0~65535" + - name: "sgsMmeIp" + type: "string" + value: "192.168.1.179" + access: "read-write" + filter: "0~64" + display: "SGs MME IP" + comment: "0~64" + - name: "sgsMmePort" + type: "int" + value: "29118" + access: "read-only" + filter: "0~65535" + display: "SGs MME Port" + comment: "0~65535" + - name: "s6aIdentity" + type: "string" + value: "mme.epc.mnc001.mcc001.3gppnetwork.org" + access: "read-write" + filter: "0~100" + display: "S6A MME Identity" + comment: "0~100" + - name: "localIp" + type: "string" + value: "172.16.5.220" + access: "read-write" + filter: "0~20" + display: "S6A MME IP" + comment: "0~20" gummei: display: "Gummei List" array: - - name: "index" - type: "int" - value: "0" - access: "read-write" - filter: '0~15' - display: "Index" - comment: "0~15" - - name: "plmnId" - type: "regex" - value: '00101' - access: "read-write" - filter: '^[0-9]{5,6}$' - display: "PLMN ID" - comment: "^[0-9]{5,6}$" - - name: "groupId" - type: "int" - value: '4' - access: "read-write" - filter: '0~65535' - display: "Group ID" - comment: "0~65535" - - name: "code" - type: "int" - value: '1' - access: "read-write" - filter: '0~255' - display: "Code" - comment: "0~255" + - name: "index" + type: "int" + value: "0" + access: "read" + filter: "0~15" + display: "Index" + comment: "0~15" + - name: "plmnId" + type: "regex" + value: "00101" + access: "read-write" + filter: "^[0-9]{5,6}$" + display: "PLMN ID" + comment: "^[0-9]{5,6}$" + - name: "groupId" + type: "int" + value: "4" + access: "read-write" + filter: "0~65535" + display: "Group ID" + comment: "0~65535" + - name: "code" + type: "int" + value: "1" + access: "read-write" + filter: "0~255" + display: "Code" + comment: "0~255" tai: display: "TAI List" array: - - name: "index" - type: "int" - value: "0" - access: "read-write" - filter: '0~15' - display: "Index" - comment: "0~15" - - name: "plmnId" - type: "regex" - value: '00101' - access: "read-write" - filter: '^[0-9]{5,6}$' - display: "PLMN ID" - comment: "^[0-9]{5,6}$" - - name: "tac" - type: "int" - value: "1" - access: "read-write" - filter: '0~65535' - display: "TAC" - comment: "0~65535" + - name: "index" + type: "int" + value: "0" + access: "read" + filter: "0~15" + display: "Index" + comment: "0~15" + - name: "plmnId" + type: "regex" + value: "00101" + access: "read-write" + filter: "^[0-9]{5,6}$" + display: "PLMN ID" + comment: "^[0-9]{5,6}$" + - name: "tac" + type: "int" + value: "1" + access: "read-write" + filter: "0~65535" + display: "TAC" + comment: "0~65535" hss: display: "HSS List" array: - - name: "index" - type: "int" - value: "0" - access: "read-write" - filter: '0~15' - display: "Index" - comment: "0~15" - - name: "imsiPre" - type: "regex" - value: '00101' - access: "read-write" - filter: '^[0-9]{1,15}$' - display: "IMSI Prefix" - comment: "^[0-9]{1,15}$" - - name: "hssHostname" - type: "string" - value: "hss.mnc001.mcc001.3gppnetwork.org" - access: "read-write" - filter: '0~128' - display: "HSS Hostname" - comment: "0~128" - - name: "protocol" - type: "string" - value: "SCTP" - access: "read-write" - filter: '0~8' - display: "Protocol" - comment: "0~8" - - name: "hssPort" - type: "int" - value: "3868" - access: "read-write" - filter: "0~65535" - display: "HSS Port" - comment: "0~65535" + - name: "index" + type: "int" + value: "0" + access: "read" + filter: "0~15" + display: "Index" + comment: "0~15" + - name: "imsiPre" + type: "regex" + value: "00101" + access: "read-write" + filter: "^[0-9]{1,15}$" + display: "IMSI Prefix" + comment: "^[0-9]{1,15}$" + - name: "hssHostname" + type: "string" + value: "hss.ims.mnc001.mcc001.3gppnetwork.org" + access: "read-write" + filter: "0~128" + display: "HSS Hostname" + comment: "0~128" + - name: "protocol" + type: "string" + value: "SCTP" + access: "read-write" + filter: "0~8" + display: "Protocol" + comment: "SCTP|TCP" + - name: "hssPort" + type: "int" + value: "3868" + access: "read-write" + filter: "0~65535" + display: "HSS Port" + comment: "0~65535" sgw: display: "SGW List" array: - - name: "index" - type: "int" - value: "0" - access: "read-write" - filter: '0~15' - display: "Index" - comment: "0~15" - - name: "plmnId" - type: "regex" - value: '00101' - access: "read-write" - filter: '^[0-9]{5,6}$' - display: "PLMN ID" - comment: "^[0-9]{5,6}$" - - name: "tac" - type: "int" - value: "1" - access: "read-write" - filter: '0~65535' - display: "TAC" - comment: "0~65535" - - name: "sgwIp" - type: "string" - value: "192.168.1.180" - access: "read-write" - filter: '0~64' - display: "SGW IP" - comment: "0~64" + - name: "index" + type: "int" + value: "0" + access: "read" + filter: "0~15" + display: "Index" + comment: "0~15" + - name: "plmnId" + type: "regex" + value: "00101" + access: "read-write" + filter: "^[0-9]{5,6}$" + display: "PLMN ID" + comment: "^[0-9]{5,6}$" + - name: "tac" + type: "int" + value: "1" + access: "read-write" + filter: "0~65535" + display: "TAC" + comment: "0~65535" + - name: "sgwIp" + type: "string" + value: "172.16.5.150" + access: "read-write" + filter: "0~64" + display: "SGW IP" + comment: "0~64" pgw: display: "PGW List" array: - - name: "index" - type: "int" - value: "0" - access: "read-write" - filter: '0~15' - display: "Index" - comment: "0~15" - - name: "plmnId" - type: "regex" - value: '00101' - access: "read-write" - filter: '^[0-9]{5,6}$' - display: "PLMN ID" - comment: "^[0-9]{5,6}$" - - name: "apn" - type: "string" - value: "internet" - access: "read-write" - filter: '0~128' - display: "APN" - comment: "0~128" - - name: "pgwIp" - type: "string" - value: "192.168.1.181" - access: "read-write" - filter: '0~64' - display: "PGW IP" - comment: "0~64" + - name: "index" + type: "int" + value: "0" + access: "read" + filter: "0~15" + display: "Index" + comment: "0~15" + - name: "plmnId" + type: "regex" + value: "00101" + access: "read-write" + filter: "^[0-9]{5,6}$" + display: "PLMN ID" + comment: "^[0-9]{5,6}$" + - name: "apn" + type: "string" + value: "internet" + access: "read-write" + filter: "0~128" + display: "APN" + comment: "0~128" + - name: "pgwIp" + type: "string" + value: "192.168.1.181" + access: "read-write" + filter: "0~64" + display: "PGW IP" + comment: "0~64" amf: display: "AMF List" array: - - name: "index" - type: "int" - value: "0" - access: "read-write" - filter: '0~15' - display: "Index" - comment: "0~15" - - name: "plmnId" - type: "regex" - value: '00101' - access: "read-write" - filter: '^[0-9]{5,6}$' - display: "PLMN ID" - comment: "^[0-9]{5,6}$" - - name: "tac" - type: "int" - value: "1" - access: "read-write" - filter: '0~16777215' - display: "TAC" - comment: "0~16777215" - - name: "regionId" - type: "int" - value: "1" - access: "read-write" - filter: '0~255' - display: "Region ID" - comment: "0~255" - - name: "setId" - type: "int" - value: "1" - access: "read-write" - filter: '0~1023' - display: "Set ID" - comment: "0~1023" - - name: "pointer" - type: "int" - value: "1" - access: "read-write" - filter: '0~63' - display: "Pointer" - comment: "0~63" - - name: "amfIp" - type: "string" - value: "192.168.1.188" - access: "read-write" - filter: '0~64' - display: "AMF IP" - comment: "0~64" \ No newline at end of file + - name: "index" + type: "int" + value: "0" + access: "read" + filter: "0~15" + display: "Index" + comment: "0~15" + - name: "plmnId" + type: "regex" + value: "00101" + access: "read-write" + filter: "^[0-9]{5,6}$" + display: "PLMN ID" + comment: "^[0-9]{5,6}$" + - name: "tac" + type: "int" + value: "1" + access: "read-write" + filter: "0~16777215" + display: "TAC" + comment: "0~16777215" + - name: "regionId" + type: "int" + value: "1" + access: "read-write" + filter: "0~255" + display: "Region ID" + comment: "0~255" + - name: "setId" + type: "int" + value: "1" + access: "read-write" + filter: "0~1023" + display: "Set ID" + comment: "0~1023" + - name: "pointer" + type: "int" + value: "1" + access: "read-write" + filter: "0~63" + display: "Pointer" + comment: "0~63" + - name: "amfIp" + type: "string" + value: "172.16.5.120" + access: "read-write" + filter: "0~64" + display: "AMF IP" + comment: "0~64" diff --git a/config/param/smf_param_config.yaml b/config/param/smf_param_config.yaml index aa9e12d2..b6863a8d 100644 --- a/config/param/smf_param_config.yaml +++ b/config/param/smf_param_config.yaml @@ -535,4 +535,63 @@ smf: access: "read-write" filter: '1~64' display: "UPF ID" - comment: "upf1-id;upf2-id;upf3-id" \ No newline at end of file + comment: "upf1-id;upf2-id;upf3-id" + offlineChargingConfig: + display: "Offline Charging Config" + list: + - name: "cdrFileName" + type: "string" + value: "smf.cdr" + access: "read-write" + filter: "1~64" + display: "CDR File Name" + comment: "" + - name: "cdrFilePath" + type: "string" + value: "/var/log/smfCdr" + access: "read-write" + filter: "1~256" + display: "CDR File Path" + comment: "" + - name: "cdrFileNum" + type: "int" + value: "50" + access: "read-write" + filter: "1~999999999" + display: "CDR File Num" + comment: "" + - name: "cdrFileSize" + type: "int" + value: "300" + access: "read-write" + filter: "1~999999" + display: "CDR File Size" + comment: "Megabytes" + - name: "cdrFileMaxAge" + type: "int" + value: "30" + access: "read-write" + filter: "0~9999" + display: "CDR File Max Age" + comment: "Days" + - name: "freeSubsCdrEnable" + type: "bool" + value: "false" + access: "read-write" + filter: "" + display: "Free Subscribers CDR Enable" + comment: "" + - name: "timeThreshold" + type: "int" + value: "600" + access: "read-write" + filter: "0~999999999" + display: "Time Threshold" + comment: "Seconds" + - name: "volumeThreshold" + type: "int" + value: "0" + access: "read-write" + filter: "0~999999999999999" + display: "Volume Threshold" + comment: "Bytes" \ No newline at end of file diff --git a/crontask/makefile b/crontask/makefile index a660cf81..f984989e 100644 --- a/crontask/makefile +++ b/crontask/makefile @@ -7,7 +7,7 @@ BINNAME = crontask .PHONY: build $(BINNAME) build $(BINNAME): - go build -o $(BINNAME) -v -ldflags "-X '$(LIBDIR)/global.Version=$(VERSION)' \ + go build -o $(BINNAME) -v -ldflags "-s -w -X '$(LIBDIR)/global.Version=$(VERSION)' \ -X '$(LIBDIR)/global.BuildTime=`date`' \ -X '$(LIBDIR)/global.GoVer=`go version`'" diff --git a/crontask/tasks.go b/crontask/tasks.go index 3b8a931c..e64e8446 100644 --- a/crontask/tasks.go +++ b/crontask/tasks.go @@ -493,59 +493,59 @@ type SystemState struct { func (t *TaskFunc) TaskHandShakeToNF(uri, params, body string) { log.Debug("TaskHandShakeToNF processing... ") - var nes []NeInfo - _, err := XormGetAllNeInfo(&nes) - if err != nil { - log.Error("Failed to get all ne info:", err) - } + // var nes []NeInfo + // _, err := XormGetAllNeInfo(&nes) + // if err != nil { + // log.Error("Failed to get all ne info:", err) + // } - for _, ne := range nes { - requestURI := fmt.Sprintf(uri, strings.ToLower(ne.NeType)) - if params != "" { - requestURI = fmt.Sprintf("%s?%s", requestURI, params) - } - requestURL := fmt.Sprintf("http://%s:%s%s", ne.Ip, ne.Port, requestURI) - log.Debug("requestURL: Get", requestURL) - client := resty.New() - response, err := client.R(). - EnableTrace(). - SetHeaders(map[string]string{"User-Agent": GetDefaultUserAgent()}). - SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}). - Get(requestURL) - if err != nil { - log.Error("Failed to Get:", err) - } + // for _, ne := range nes { + // requestURI := fmt.Sprintf(uri, strings.ToLower(ne.NeType)) + // if params != "" { + // requestURI = fmt.Sprintf("%s?%s", requestURI, params) + // } + // requestURL := fmt.Sprintf("http://%s:%s%s", ne.Ip, ne.Port, requestURI) + // log.Debug("requestURL: Get", requestURL) + // client := resty.New() + // response, err := client.R(). + // EnableTrace(). + // SetHeaders(map[string]string{"User-Agent": GetDefaultUserAgent()}). + // SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}). + // Get(requestURL) + // if err != nil { + // log.Error("Failed to Get:", err) + // } - log.Debug("StatusCode: ", response.StatusCode()) - switch response.StatusCode() { - case http.StatusOK, http.StatusCreated, http.StatusNoContent, http.StatusAccepted: - log.Debug("response body:", string(response.Body())) - state := new(SystemState) - _ = json.Unmarshal(response.Body(), &state) - neState := new(NeState) - neState.NeType = ne.NeType - neState.NeId = ne.NeId - neState.Version = state.Version - neState.Capability = state.Capability - neState.SerialNum = state.SerialNum - neState.ExpiryDate = state.ExpiryDate - cu, _ := json.Marshal(state.CpuUsage) - neState.CpuUsage = string(cu) - mu, _ := json.Marshal(state.MemUsage) - neState.MemUsage = string(mu) - ds, _ := json.Marshal(state.DiskSpace) - neState.DiskSpace = string(ds) - log.Debug("neState:", neState) - _, err := XormInsertNeState(neState) - if err != nil { - log.Error("Failed to insert ne_state:", err) - } - default: - log.Debug("response body:", string(response.Body())) - body := new(map[string]interface{}) - _ = json.Unmarshal(response.Body(), &body) - } - } + // log.Debug("StatusCode: ", response.StatusCode()) + // switch response.StatusCode() { + // case http.StatusOK, http.StatusCreated, http.StatusNoContent, http.StatusAccepted: + // log.Debug("response body:", string(response.Body())) + // state := new(SystemState) + // _ = json.Unmarshal(response.Body(), &state) + // neState := new(NeState) + // neState.NeType = ne.NeType + // neState.NeId = ne.NeId + // neState.Version = state.Version + // neState.Capability = state.Capability + // neState.SerialNum = state.SerialNum + // neState.ExpiryDate = state.ExpiryDate + // cu, _ := json.Marshal(state.CpuUsage) + // neState.CpuUsage = string(cu) + // mu, _ := json.Marshal(state.MemUsage) + // neState.MemUsage = string(mu) + // ds, _ := json.Marshal(state.DiskSpace) + // neState.DiskSpace = string(ds) + // log.Debug("neState:", neState) + // _, err := XormInsertNeState(neState) + // if err != nil { + // log.Error("Failed to insert ne_state:", err) + // } + // default: + // log.Debug("response body:", string(response.Body())) + // body := new(map[string]interface{}) + // _ = json.Unmarshal(response.Body(), &body) + // } + // } } func (t *TaskFunc) TaskExportCmFromNF(uri, params, body string) { diff --git a/data2html/data2html.go b/data2html/data2html.go index b437bc1e..8470b87d 100644 --- a/data2html/data2html.go +++ b/data2html/data2html.go @@ -77,7 +77,7 @@ func execTshark(html string, filename string, proto string, port int) { //if err1 != nil { // fmt.Println("write html failed") //}else { - //xsltproc pdml2html.xsl ngap.pdml > /home/manager/ngap.html + //xsltproc pdml2html.xsl ngap.pdml > /home/omcuser/ngap.html command := fmt.Sprintf("xsltproc /usr/local/omc/etc/schema/pdml2html.xsl %s > %s", pdmlFile, html) dest := exec.Command("sh", "-c", command) _, err2 := dest.Output() diff --git a/data2html/makefile b/data2html/makefile index 2f833635..e5013f28 100644 --- a/data2html/makefile +++ b/data2html/makefile @@ -17,7 +17,7 @@ BINNAME = data2html .PHONY: build $(BINNAME) build $(BINNAME): - go build -o $(BINNAME) -v -ldflags "-X '$(LIBDIR)/global.Version=$(VERSION)' \ + go build -o $(BINNAME) -v -ldflags "-s -w -X '$(LIBDIR)/global.Version=$(VERSION)' \ -X '$(LIBDIR)/global.BuildTime=`date`' \ -X '$(LIBDIR)/global.GoVer=`go version`'" diff --git a/database/common/kpi_title.sql b/database/common/kpi_title.sql index 93b4cf94..e9b22139 100644 --- a/database/common/kpi_title.sql +++ b/database/common/kpi_title.sql @@ -21,16 +21,16 @@ SET FOREIGN_KEY_CHECKS = 0; -- Table structure for kpi_title -- ---------------------------- DROP TABLE IF EXISTS `kpi_title`; -CREATE TABLE `kpi_title` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `ne_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `kpi_id` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `title_json` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL, - `cn_title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `en_title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, +CREATE TABLE `kpi_title` ( + `id` int NOT NULL AUTO_INCREMENT, + `ne_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `kpi_id` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `title_json` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin, + `cn_title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `en_title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE, - INDEX `idx_kpi_id`(`kpi_id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 853 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + KEY `idx_ntype_kid` (`ne_type`,`kpi_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; -- ---------------------------- -- Records of kpi_title diff --git a/database/common/param_config.sql b/database/common/param_config.sql index 012cf5ac..6d4ef7e3 100644 --- a/database/common/param_config.sql +++ b/database/common/param_config.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 : omc_db - - Target Server Type : MariaDB - Target Server Version : 100338 (10.3.38-MariaDB) - File Encoding : 65001 - - Date: 12/06/2024 16:36:28 -*/ - SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; @@ -21,17 +5,17 @@ SET FOREIGN_KEY_CHECKS = 0; -- Table structure for param_config -- ---------------------------- DROP TABLE IF EXISTS `param_config`; -CREATE TABLE `param_config` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `ne_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `top_tag` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `top_display` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `method` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'method allow: \"get\", \"get,post,put\", \"delete\"', - `param_json` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL, +CREATE TABLE `param_config` ( + `id` int NOT NULL AUTO_INCREMENT, + `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '网元类型', + `ne_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', + `top_tag` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '', + `top_display` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `method` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '操作属性 get只读强制不可编辑删除 put可编辑 delete可删除 post可新增', + `param_json` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT 'accesss属性控制:只读read-only/read/ro 读写read-write', PRIMARY KEY (`id`) USING BTREE, - INDEX `id`(`id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 1698 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + KEY `idx_type_name` (`ne_type`,`top_tag`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='网元参数配置可用属性值'; -- ---------------------------- -- Records of param_config @@ -80,22 +64,25 @@ INSERT INTO `param_config` VALUES (1638, 'UDM', '', 'scscfSet', 'SCSCF Set', '', INSERT INTO `param_config` VALUES (1639, 'UDM', '', 'triggerPoint', 'Trigger Point', '', '{\"array\":[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~16\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"^.{1,32}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"def_snssai\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Condition Type CNF\",\"filter\":\"0~1\",\"name\":\"conditionTypeCNF\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-only\",\"array\":[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~4\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Enable\",\"filter\":\"\",\"name\":\"enable\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Condition Negated\",\"filter\":\"0~1\",\"name\":\"conditionNegated\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Group\",\"filter\":\"0~4096\",\"name\":\"group\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Method\",\"filter\":\"^.{0,32}$\",\"name\":\"method\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SIP Header\",\"filter\":\"^.{0,64}$\",\"name\":\"sipHeader\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SIP Content\",\"filter\":\"^.{0,64}$\",\"name\":\"sipContent\",\"type\":\"string\",\"value\":\"\"}],\"comment\":\"\",\"display\":\"SPT List\",\"filter\":\"1~4\",\"name\":\"sptList\",\"type\":\"int\",\"value\":\"1\"}]}'); INSERT INTO `param_config` VALUES (1640, 'UDM', '', 's6aServer', 'S6a Server', '', '{\"list\":[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Enable\",\"filter\":\"false;true;\",\"name\":\"enable\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Link Type\",\"filter\":\"{\\\"0\\\":\\\"TCP\\\",\\\"1\\\":\\\"SCTP\\\"}\",\"name\":\"netType\",\"type\":\"enum\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Address\",\"filter\":\"\",\"name\":\"addr\",\"type\":\"string\",\"value\":\"172.16.5.140:3868\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Host\",\"filter\":\"^.{1,127}$\",\"name\":\"host\",\"type\":\"string\",\"value\":\"hss.ims.mnc001.mcc001.3gppnetwork.org\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Realm\",\"filter\":\"^.{1,127}$\",\"name\":\"realm\",\"type\":\"string\",\"value\":\"ims.mnc001.mcc001.3gppnetwork.org\"}]}'); INSERT INTO `param_config` VALUES (1641, 'UDM', '', 'cxServer', 'Cx Server', '', '{\"list\":[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Enable\",\"filter\":\"false;true;\",\"name\":\"enable\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Link Type\",\"filter\":\"{\\\"0\\\":\\\"TCP\\\",\\\"1\\\":\\\"SCTP\\\"}\",\"name\":\"netType\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Address\",\"filter\":\"\",\"name\":\"addr\",\"type\":\"string\",\"value\":\"172.16.5.140:3868\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Host\",\"filter\":\"^.{1,127}$\",\"name\":\"host\",\"type\":\"string\",\"value\":\"hss.ims.mnc001.mcc001.3gppnetwork.org\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Realm\",\"filter\":\"^.{1,127}$\",\"name\":\"realm\",\"type\":\"string\",\"value\":\"ims.mnc001.mcc001.3gppnetwork.org\"}]}'); -INSERT INTO `param_config` VALUES (1642, 'IMS', '', 'system', 'System', '', '{\"list\":[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Label\",\"filter\":\"\",\"name\":\"label\",\"type\":\"string\",\"value\":\"ims-core\"},{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"HPLMN MCC\",\"filter\":\"\",\"name\":\"hplmnMCC\",\"type\":\"string\",\"value\":\"001\"},{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"HPLMN MNC\",\"filter\":\"\",\"name\":\"hplmnMNC\",\"type\":\"string\",\"value\":\"01\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Local Network IPv4\",\"filter\":\"\",\"name\":\"LocalNetworkIPv4\",\"type\":\"ipv4\",\"value\":\"172.16.5.110\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Public Network IPv4\",\"filter\":\"\",\"name\":\"serviceIP\",\"type\":\"ipv4\",\"value\":\"172.16.5.110\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Public Network IPv6\",\"filter\":\"\",\"name\":\"serviceIPv6\",\"type\":\"ipv6\",\"value\":\"\"},{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Domain Name 1\",\"filter\":\"\",\"name\":\"domainName1\",\"type\":\"string\",\"value\":\"ims.mnc001.mcc001.3gppnetwork.org\"},{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Domain Name 2\",\"filter\":\"\",\"name\":\"domainName2\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Domain Name 3\",\"filter\":\"\",\"name\":\"domainName3\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Domain Name 4\",\"filter\":\"\",\"name\":\"domainName4\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"MultiDomain Indicator\",\"filter\":\"false;true;\",\"name\":\"multiDomainInd\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Transcode Indicator\",\"filter\":\"false;true;\",\"name\":\"transcodeInd\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"MultiIPStack Indicator\",\"filter\":\"false;true;\",\"name\":\"multiIPStackInd\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Register Timer\",\"filter\":\"120-1000000\",\"name\":\"registerTimer\",\"type\":\"int\",\"value\":\"7200\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Max Call Duration\",\"filter\":\"1800-1000000\",\"name\":\"maxCallDuration\",\"type\":\"int\",\"value\":\"43200\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Dispatch System Indicator\",\"filter\":\"false;true;\",\"name\":\"dispatchSystemInd\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Dispatch System IPv4\",\"filter\":\"\",\"name\":\"dispatchSystemIP\",\"type\":\"ipv4\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Internal SMS Indicator\",\"filter\":\"false;true;\",\"name\":\"internalSMSInd\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Internal CDR Indicator\",\"filter\":\"false;true;\",\"name\":\"internalCDRInd\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Internal KPI Indicator\",\"filter\":\"false;true;\",\"name\":\"internalKPIInd\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"PCF IP Address\",\"filter\":\"\",\"name\":\"pcfIP\",\"type\":\"ipv4\",\"value\":\"172.16.5.140\"}]}'); -INSERT INTO `param_config` VALUES (1643, 'IMS', '', 'plmn', 'PLMN List', '', '{\"array\":[{\"access\":\"read-only\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"MCC\",\"filter\":\"^[0-9]{3}$\",\"name\":\"mcc\",\"type\":\"regex\",\"value\":\"001\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"MNC\",\"filter\":\"^[0-9]{2,3}$\",\"name\":\"mnc\",\"type\":\"regex\",\"value\":\"01\"},{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Domain\",\"filter\":\"0~128\",\"name\":\"domain\",\"type\":\"string\",\"value\":\"ims.mnc001.mcc001.3gppnetwork.org\"}]}'); -INSERT INTO `param_config` VALUES (1644, '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: 0,Close 1,Open\",\"display\":\"Admin State\",\"enum\":[0,1],\"filter\":\"0~1\",\"name\":\"adminState\",\"type\":\"int\",\"value\":0}]}'); + +-- SMF 更新时间2024/06/17 17:50 INSERT INTO `param_config` VALUES (1645, 'SMF', '', 'smfSystem', 'SMF System Config', '', '{\"list\":[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SBI IP\",\"filter\":\"\",\"name\":\"sbiIpAddr\",\"type\":\"string\",\"value\":\"172.16.5.150\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"SBI Port\",\"filter\":\"0~65535\",\"name\":\"sbiPort\",\"type\":\"int\",\"value\":\"8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SBI Scheme\",\"filter\":\"{\\\"0\\\":\\\"http\\\", \\\"1\\\":\\\"https\\\"}\",\"name\":\"sbiScheme\",\"type\":\"enum\",\"value\":\"http\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"N4 IPv4\",\"filter\":\"\",\"name\":\"n4Ipv4\",\"type\":\"ipv4\",\"value\":\"172.16.5.150\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"N4 IPv6\",\"filter\":\"\",\"name\":\"n4Ipv6\",\"type\":\"ipv6\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"N4U IPv4\",\"filter\":\"\",\"name\":\"n4UIpv4\",\"type\":\"ipv4\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"N4U IPv6\",\"filter\":\"\",\"name\":\"n4UIpv6\",\"type\":\"ipv6\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AMF URI\",\"filter\":\"\",\"name\":\"amfUri\",\"type\":\"string\",\"value\":\"http://172.16.5.120:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"PCF Enable\",\"filter\":\"\",\"name\":\"pcfEnable\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"PCF URI\",\"filter\":\"\",\"name\":\"pcfUri\",\"type\":\"string\",\"value\":\"http://172.16.5.160:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UDM URI\",\"filter\":\"\",\"name\":\"udmUri\",\"type\":\"string\",\"value\":\"http://172.16.5.140:8080\"},{\"access\":\"read-write\",\"display\":\"5G Charging Enable\",\"filter\":\"{\\\"0\\\":\\\"false\\\", \\\"1\\\":\\\"true\\\"}\",\"name\":\"chfEnable\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"CHF Primary URI\",\"filter\":\"\",\"name\":\"chfPrimaryUri\",\"type\":\"string\",\"value\":\"http://172.16.5.240:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"CHF Secondary URI\",\"filter\":\"\",\"name\":\"chfSecondaryUri\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NRF Enable\",\"filter\":\"{\\\"0\\\":\\\"false\\\", \\\"1\\\":\\\"true\\\"}\",\"name\":\"nrfEnable\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NRF URI\",\"filter\":\"\",\"name\":\"nrfUri\",\"type\":\"string\",\"value\":\"http://172.16.5.180:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Primary DNS IPv4\",\"filter\":\"\",\"name\":\"primaryDnsIpv4\",\"type\":\"ipv4\",\"value\":\"114.114.114.114\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Secondary DNS IPv4\",\"filter\":\"\",\"name\":\"secondaryDnsIpv4\",\"type\":\"ipv4\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Primary DNS IPv6\",\"filter\":\"\",\"name\":\"primaryDnsIpv6\",\"type\":\"ipv6\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Secondary DNS IPv6\",\"filter\":\"\",\"name\":\"secondaryDnsIpv6\",\"type\":\"ipv6\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Primary PCSCF IPv4\",\"filter\":\"\",\"name\":\"primaryPcscfIpv4\",\"type\":\"ipv4\",\"value\":\"172.16.5.110\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Secondary PCSCF IPv4\",\"filter\":\"\",\"name\":\"secondaryPcscfIpv4\",\"type\":\"ipv4\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Primary PCSCF IPv6\",\"filter\":\"\",\"name\":\"primaryPcscfIpv6\",\"type\":\"ipv6\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Secondary PCSCF IPv6\",\"filter\":\"\",\"name\":\"secondaryPcscfIpv6\",\"type\":\"ipv6\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UE MTU\",\"filter\":\"0~65535\",\"name\":\"ueMtu\",\"type\":\"int\",\"value\":\"\"}]}'); INSERT INTO `param_config` VALUES (1646, 'SMF', '', 'spgwSystem', 'SPGW Sytem Config', '', '{\"list\":[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Local S11 IP\",\"filter\":\"\",\"name\":\"s11Ip\",\"type\":\"string\",\"value\":\"172.16.5.150\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Local Diameter IP\",\"filter\":\"\",\"name\":\"localDiameterIp\",\"type\":\"string\",\"value\":\"172.16.5.150\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Local Diameter Host Name\",\"filter\":\"\",\"name\":\"localDiameterHostName\",\"type\":\"string\",\"value\":\"smf.mnc001.mcc001.3gppnetwork.org\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Local Diameter Realm Name\",\"filter\":\"\",\"name\":\"localDiameterRealmName\",\"type\":\"string\",\"value\":\"mnc001.mcc001.3gppnetwork.org\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Gy Enable\",\"filter\":\"false;true;\",\"name\":\"peerGyEnable\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Primary Remote Gy IP\",\"filter\":\"\",\"name\":\"primaryPeerGyIp\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"Primary Remote Gy Port\",\"filter\":\"0~65535\",\"name\":\"primaryPeerGyPort\",\"type\":\"int\",\"value\":\"3868\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Secondary Remote Gy IP\",\"filter\":\"\",\"name\":\"secondaryPeerGyIp\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"Secondary Remote Gy Port\",\"filter\":\"0~65535\",\"name\":\"secondaryPeerGyPort\",\"type\":\"int\",\"value\":\"3868\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Gx Enable\",\"filter\":\"false;true;\",\"name\":\"peerGxEnable\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Gx Charging Enable\",\"filter\":\"false;true;\",\"name\":\"gxChargingEnable\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Primary Remote Gx IP\",\"filter\":\"\",\"name\":\"primaryPeerGxIp\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"Primary Remote Gx Port\",\"filter\":\"0~65535\",\"name\":\"primaryPeerGxPort\",\"type\":\"int\",\"value\":\"3868\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Secondary Remote Gx IP\",\"filter\":\"\",\"name\":\"secondaryPeerGxIp\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"Secondary Remote Gx Port\",\"filter\":\"0~65535\",\"name\":\"secondaryPeerGxPort\",\"type\":\"int\",\"value\":\"3868\"}]}'); INSERT INTO `param_config` VALUES (1647, 'SMF', '', 'upfConfig', 'UPF Config', '', '{\"array\":[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"0~2047\",\"name\":\"index\",\"type\":\"int\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UPF ID\",\"filter\":\"1~64\",\"name\":\"id\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"e.g. ip:port\",\"display\":\"Address\",\"filter\":\"7~45\",\"name\":\"addr\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"IPv4,IPv6,IPv4v6\",\"display\":\"Ip Pool Type\",\"filter\":\"\",\"name\":\"ipPoolType\",\"type\":\"string\",\"value\":\"IPv4v6\"},{\"access\":\"read-write\",\"comment\":\"CIDR format, e.g. 192.168.1.0/24\",\"display\":\"IPv4 Pools\",\"filter\":\"10~256\",\"name\":\"ipv4Pools\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"CIDR format, e.g. fe80::20c:29ff:fee4:dab7/50\",\"display\":\"IPv6 Pools\",\"filter\":\"5~512\",\"name\":\"ipv6Pools\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Static IPv4 Enable\",\"filter\":\"{\\\"0\\\":\\\"false\\\", \\\"1\\\":\\\"true\\\"}\",\"name\":\"staticIpv4Enable\",\"type\":\"bool\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"ipv4 format\",\"display\":\"Static IPv4 Start\",\"filter\":\"\",\"name\":\"staticIpv4Start\",\"type\":\"ipv4\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"ipv4 format\",\"display\":\"Static IPv4 End\",\"filter\":\"\",\"name\":\"staticIpv4End\",\"type\":\"ipv4\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Static IPv6 Enable\",\"filter\":\"{\\\"0\\\":\\\"false\\\", \\\"1\\\":\\\"true\\\"}\",\"name\":\"staticIpv6Enable\",\"type\":\"bool\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"ipv6 format\",\"display\":\"Static IPv6 Start\",\"filter\":\"\",\"name\":\"staticIpv6Start\",\"type\":\"ipv6\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"ipv6 format\",\"display\":\"Static IPv6 End\",\"filter\":\"\",\"name\":\"staticIpv6End\",\"type\":\"ipv6\",\"value\":\"\"},{\"array\":[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"0~2047\",\"name\":\"index\",\"type\":\"int\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"DNN\",\"filter\":\"1~64\",\"name\":\"dnn\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"IPv4,IPv6,IPv4v6\",\"display\":\"Ip Pool Type\",\"filter\":\"\",\"name\":\"ipPoolType\",\"type\":\"string\",\"value\":\"IPv4v6\"},{\"access\":\"read-write\",\"comment\":\"CIDR format, e.g. 192.168.1.0/24\",\"display\":\"IPv4 Pools\",\"filter\":\"10~256\",\"name\":\"ipv4Pools\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"CIDR format, e.g. fe80::20c:29ff:fee4:dab7/50\",\"display\":\"IPv6 Pools\",\"filter\":\"5~512\",\"name\":\"ipv6Pools\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Static IPv4 Enable\",\"filter\":\"{\\\"0\\\":\\\"false\\\", \\\"1\\\":\\\"true\\\"}\",\"name\":\"staticIpv4Enable\",\"type\":\"bool\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"ipv4 format\",\"display\":\"Static IPv4 Start\",\"filter\":\"\",\"name\":\"staticIpv4Start\",\"type\":\"ipv4\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"ipv4 format\",\"display\":\"Static IPv4 End\",\"filter\":\"\",\"name\":\"staticIpv4End\",\"type\":\"ipv4\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Static IPv6 Enable\",\"filter\":\"{\\\"0\\\":\\\"false\\\", \\\"1\\\":\\\"true\\\"}\",\"name\":\"staticIpv6Enable\",\"type\":\"bool\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"ipv6 format\",\"display\":\"Static IPv6 Start\",\"filter\":\"\",\"name\":\"staticIpv6Start\",\"type\":\"ipv6\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"ipv6 format\",\"display\":\"Static IPv6 End\",\"filter\":\"\",\"name\":\"staticIpv6End\",\"type\":\"ipv6\",\"value\":\"\"}],\"display\":\"UE DNN IP Pool\",\"name\":\"ueDnnIpPool\"}]}'); INSERT INTO `param_config` VALUES (1648, 'SMF', '', 'dnnSelectUpf', 'DNN Select UPF', '', '{\"array\":[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"0~65535\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"DNN\",\"filter\":\"1~64\",\"name\":\"dnn\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UPF ID\",\"filter\":\"1~64\",\"name\":\"upfId\",\"type\":\"string\",\"value\":\"\"}]}'); INSERT INTO `param_config` VALUES (1649, 'SMF', '', 'dnnTaiSelectUpf', 'DNN TAI Select UPF', '', '{\"array\":[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"0~65535\",\"name\":\"index\",\"type\":\"int\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"DNN\",\"filter\":\"1~64\",\"name\":\"dnn\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"MCC+MNC+TAC\",\"display\":\"TAI\",\"filter\":\"1~64\",\"name\":\"tai\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UPF ID\",\"filter\":\"1~64\",\"name\":\"upfId\",\"type\":\"string\",\"value\":\"upf2-Id\"}]}'); INSERT INTO `param_config` VALUES (1650, 'SMF', '', 'snssaiSelectUpf', 'SNSSAI Select UPF', '', '{\"array\":[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"0~65535\",\"name\":\"index\",\"type\":\"int\",\"value\":\"\"},{\"access\":\"read-write\",\"display\":\"Enable\",\"filter\":\"false;true;\",\"name\":\"enable\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"read-write\",\"comment\":\"sst1-sd1;sst2-sd2;sst3-sd3\",\"display\":\"SNSSAI\",\"filter\":\"1~64\",\"name\":\"snssai\",\"type\":\"string\",\"value\":\"1-000001\"},{\"access\":\"read-write\",\"comment\":\"upf1-id;upf2-id;upf3-id\",\"display\":\"UPF ID\",\"filter\":\"1~64\",\"name\":\"upfId\",\"type\":\"string\",\"value\":\"upf1-Id\"}]}'); -INSERT INTO `param_config` VALUES (1657, 'MME', '', 'system', 'System Config', '', '{\"list\":[{\"access\":\"read-write\",\"comment\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"display\":\"CSFB Enabled\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"csfbEnabled\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"display\":\"VoLTE Enabled\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"volteEnabled\",\"type\":\"bool\",\"value\":\"0\"},{\"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\"}]}'); -INSERT INTO `param_config` VALUES (1658, 'MME', '', 'gummei', 'Gummei List', '', '{\"array\":[{\"access\":\"read-write\",\"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\"}]}'); -INSERT INTO `param_config` VALUES (1659, 'MME', '', 'tai', 'TAI List', '', '{\"array\":[{\"access\":\"read-write\",\"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\"}]}'); -INSERT INTO `param_config` VALUES (1660, 'MME', '', 'hss', 'HSS List', '', '{\"array\":[{\"access\":\"read-write\",\"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.mnc001.mcc001.3gppnetwork.org\"},{\"access\":\"read-write\",\"comment\":\"0~8\",\"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\"}]}'); -INSERT INTO `param_config` VALUES (1661, 'MME', '', 'sgw', 'SGW List', '', '{\"array\":[{\"access\":\"read-write\",\"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\":\"192.168.1.180\"}]}'); -INSERT INTO `param_config` VALUES (1662, 'MME', '', 'pgw', 'PGW List', '', '{\"array\":[{\"access\":\"read-write\",\"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\"}]}'); -INSERT INTO `param_config` VALUES (1663, 'MME', '', 'amf', 'AMF List', '', '{\"array\":[{\"access\":\"read-write\",\"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\":\"192.168.1.188\"}]}'); +INSERT INTO `param_config` VALUES (1651, 'SMF', '', 'offlineChargingConfig', 'Offline Charging Config', '', '{\"list\":[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"CDR File Name\",\"filter\":\"\",\"name\":\"cdrFileName\",\"type\":\"string\",\"value\":\"smf.cdr\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"CDR File Path\",\"filter\":\"\",\"name\":\"cdrFilePath\",\"type\":\"string\",\"value\":\"/var/log/smfCdr\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"CDR File Num\",\"filter\":\"1~999999999\",\"name\":\"cdrFileNum\",\"type\":\"int\",\"value\":\"50\"},{\"access\":\"read-write\",\"comment\":\"Megabytes\",\"display\":\"CDR File Size\",\"filter\":\"1~999999\",\"name\":\"cdrFileSize\",\"type\":\"int\",\"value\":\"300\"},{\"access\":\"read-write\",\"comment\":\"Days\",\"display\":\"CDR File Max Age\",\"filter\":\"0~9999\",\"name\":\"cdrFileMaxAge\",\"type\":\"int\",\"value\":\"30\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Free Subscribers CDR Enable\",\"filter\":\"\",\"name\":\"freeSubsCdrEnable\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"Seconds\",\"display\":\"Time Threshold\",\"filter\":\"0~999999999\",\"name\":\"timeThreshold\",\"type\":\"int\",\"value\":\"600\"},{\"access\":\"read-write\",\"comment\":\"Bytes\",\"display\":\"Volume Threshold\",\"filter\":\"0~999999999999999\",\"name\":\"volumeThreshold\",\"type\":\"int\",\"value\":\"0\"}]}'); + +-- MME 更新时间2024/06/27 15:13 +INSERT INTO `param_config` VALUES (1657, '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\"}]}'); +INSERT INTO `param_config` VALUES (1658, '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\"}]}'); +INSERT INTO `param_config` VALUES (1659, '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\"}]}'); +INSERT INTO `param_config` VALUES (1660, '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\":\"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\"}]}'); +INSERT INTO `param_config` VALUES (1661, '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\"}]}'); +INSERT INTO `param_config` VALUES (1662, '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\"}]}'); +INSERT INTO `param_config` VALUES (1663, '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\"}]}'); + INSERT INTO `param_config` VALUES (1681, 'UPF', '', 'general', 'General', '', '{\"list\":[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Config File Directory\",\"filter\":\"\",\"name\":\"configFileDirectory\",\"type\":\"string\",\"value\":\"/usr/local/etc/upf/\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"EXE File Directory\",\"filter\":\"\",\"name\":\"exeFileDirectory\",\"type\":\"string\",\"value\":\"/usr/local/bin/\"},{\"access\":\"read-write\",\"comment\":\"1~255\",\"display\":\"System ID\",\"filter\":\"\",\"name\":\"systemId\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"1~8\",\"display\":\"Data Forwarder Number\",\"filter\":\"1~8\",\"name\":\"dataForwarderNum\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Common Statistic Interval\",\"filter\":\"\",\"name\":\"commonStatisticInterval\",\"type\":\"int\",\"value\":\"60\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"User Statistic Interval\",\"filter\":\"\",\"name\":\"userStatisticInterval\",\"type\":\"int\",\"value\":\"60\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"RX N3 OverLoad Threshold Mbps\",\"filter\":\"\",\"name\":\"rxN3OverLoadThresholdMbps\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"RX N6 OverLoad Threshold Mbps\",\"filter\":\"\",\"name\":\"rxN6OverLoadThresholdMbps\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"0~255\",\"display\":\"Checksum Offload\",\"filter\":\"0~255\",\"name\":\"checksumOffload\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Max Downlink Buffer Num\",\"filter\":\"\",\"name\":\"maxDownlinkBufferNum\",\"type\":\"int\",\"value\":\"50\"}]}'); INSERT INTO `param_config` VALUES (1682, 'UPF', '', 'logger', 'Logger', '', '{\"list\":[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Log File Full Path\",\"filter\":\"\",\"name\":\"logFileFullPath\",\"type\":\"string\",\"value\":\"/var/log/upf.log\"},{\"access\":\"read-write\",\"comment\":\"error|warning|info|debug\",\"display\":\"Log Level\",\"filter\":\"\",\"name\":\"logLevel\",\"type\":\"string\",\"value\":\"error\"},{\"access\":\"read-write\",\"comment\":\"error|warning|info|debug\",\"display\":\"Upfd Log Level\",\"filter\":\"\",\"name\":\"upfdLogLevel\",\"type\":\"string\",\"value\":\"error\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Upfd Log Transfer\",\"filter\":\"\",\"name\":\"upfdLogTransfer\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Report Caller\",\"filter\":\"\",\"name\":\"reportCaller\",\"type\":\"bool\",\"value\":\"false\"}]}'); INSERT INTO `param_config` VALUES (1683, 'UPF', '', 'pfcp', 'PFCP', '', '{\"list\":[{\"access\":\"read-write\",\"comment\":\"ipv4|ipv6|ipv46\",\"display\":\"IP Type\",\"filter\":\"\",\"name\":\"ipType\",\"type\":\"string\",\"value\":\"ipv4\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Local IPv4\",\"filter\":\"\",\"name\":\"localIpv4\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Local IPv6\",\"filter\":\"\",\"name\":\"localIpv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"1~65535\",\"display\":\"Local UDP Port\",\"filter\":\"1~65535\",\"name\":\"localUdpPort\",\"type\":\"int\",\"value\":\"8805\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SMF IPv4\",\"filter\":\"\",\"name\":\"smfIpv4\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SMF IPv6\",\"filter\":\"\",\"name\":\"smfIpv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"1~65535\",\"display\":\"SMF UDP Port\",\"filter\":\"1~65535\",\"name\":\"smfUdpPort\",\"type\":\"int\",\"value\":\"8805\"},{\"access\":\"read-write\",\"comment\":\"1~255\",\"display\":\"Retry Interval\",\"filter\":\"1~255\",\"name\":\"retryInterval\",\"type\":\"int\",\"value\":\"2\"},{\"access\":\"read-write\",\"comment\":\"0~255\",\"display\":\"Max Retry\",\"filter\":\"0~255\",\"name\":\"maxRetry\",\"type\":\"int\",\"value\":\"3\"},{\"access\":\"read-write\",\"comment\":\"1~255\",\"display\":\"Heartbeat Interval\",\"filter\":\"1~255\",\"name\":\"heartbeatInterval\",\"type\":\"int\",\"value\":\"15\"}]}'); @@ -114,4 +101,10 @@ INSERT INTO `param_config` VALUES (1695, 'UPF', '', 'dpiCommon', 'DPI Common', ' INSERT INTO `param_config` VALUES (1696, 'UPF', '', 'dpiHeaderEnrichInfoList', 'DPI Header Enrich Info List', '', '{\"array\":[{\"access\":\"read-only\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Type\",\"filter\":\"\",\"name\":\"type\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"\",\"name\":\"name\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Value\",\"filter\":\"\",\"name\":\"value\",\"type\":\"string\",\"value\":\"\"}]}'); INSERT INTO `param_config` VALUES (1697, 'UPF', '', 'dpiAppList', 'DPI APP List', '', '{\"array\":[{\"access\":\"read-write\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"APP Name\",\"filter\":\"\",\"name\":\"appName\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Proxy Enabled\",\"filter\":\"0~1\",\"name\":\"proxyEnabled\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Force Check Type\",\"filter\":\"0~1\",\"name\":\"forceCheckType\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"N3 Interface ID\",\"filter\":\"0~32\",\"name\":\"n3InterfaceId\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"N6 Interface ID\",\"filter\":\"0~32\",\"name\":\"n6InterfaceId\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"array\":[{\"access\":\"read-only\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Rule ID\",\"filter\":\"\",\"name\":\"ruleId\",\"type\":\"int\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"REGEX Match\",\"filter\":\"\",\"name\":\"regexMatch\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Flow Description\",\"filter\":\"\",\"name\":\"flowDescription\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Custom Name\",\"filter\":\"\",\"name\":\"customName\",\"type\":\"string\",\"value\":\"\"}],\"comment\":\"\",\"display\":\"Rule List\",\"filter\":\"0~32\",\"name\":\"ruleList\",\"type\":\"int\",\"value\":\"1\"}]}'); +-- IMS 更新时间2024/06/26 14.41 +INSERT INTO `param_config` VALUES (1700, 'IMS', '', 'system', 'System', '', '{\"list\":[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Label\",\"filter\":\"\",\"name\":\"label\",\"type\":\"string\",\"value\":\"ims-core\"},{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"HPLMN MCC\",\"filter\":\"\",\"name\":\"hplmnMCC\",\"type\":\"string\",\"value\":\"001\"},{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"HPLMN MNC\",\"filter\":\"\",\"name\":\"hplmnMNC\",\"type\":\"string\",\"value\":\"01\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Local Network IPv4\",\"filter\":\"\",\"name\":\"LocalNetworkIPv4\",\"type\":\"ipv4\",\"value\":\"172.16.5.110\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Public Network IPv4\",\"filter\":\"\",\"name\":\"serviceIP\",\"type\":\"ipv4\",\"value\":\"172.16.5.110\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Public Network IPv6\",\"filter\":\"\",\"name\":\"serviceIPv6\",\"type\":\"ipv6\",\"value\":\"\"},{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Domain Name 1\",\"filter\":\"\",\"name\":\"domainName1\",\"type\":\"string\",\"value\":\"ims.mnc001.mcc001.3gppnetwork.org\"},{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Domain Name 2\",\"filter\":\"\",\"name\":\"domainName2\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Domain Name 3\",\"filter\":\"\",\"name\":\"domainName3\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Domain Name 4\",\"filter\":\"\",\"name\":\"domainName4\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"MultiIPStack Indicator\",\"filter\":\"{\\\"0\\\":\\\"false\\\", \\\"1\\\":\\\"true\\\"}\",\"name\":\"multiIPStackInd\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Register Timer\",\"filter\":\"120~1000000\",\"name\":\"registerTimer\",\"type\":\"int\",\"value\":\"7200\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Max Call Duration\",\"filter\":\"1800~1000000\",\"name\":\"maxCallDuration\",\"type\":\"int\",\"value\":\"43200\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Internal SMS Indicator\",\"filter\":\"{\\\"0\\\":\\\"false\\\", \\\"1\\\":\\\"true\\\"}\",\"name\":\"internalSMSInd\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Internal CDR Indicator\",\"filter\":\"{\\\"0\\\":\\\"false\\\", \\\"1\\\":\\\"true\\\"}\",\"name\":\"internalCDRInd\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Internal KPI Indicator\",\"filter\":\"{\\\"0\\\":\\\"false\\\", \\\"1\\\":\\\"true\\\"}\",\"name\":\"internalKPIInd\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"PCF IP Address\",\"filter\":\"\",\"name\":\"pcfIP\",\"type\":\"ipv4\",\"value\":\"172.16.5.160\"}]}'); +INSERT INTO `param_config` VALUES (1701, 'IMS', '', 'plmn', 'PLMN List', '', '{\"array\":[{\"access\":\"read-only\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"MCC\",\"filter\":\"^[0-9]{3}$\",\"name\":\"mcc\",\"type\":\"regex\",\"value\":\"001\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"MNC\",\"filter\":\"^[0-9]{2,3}$\",\"name\":\"mnc\",\"type\":\"regex\",\"value\":\"01\"},{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Domain\",\"filter\":\"0~128\",\"name\":\"domain\",\"type\":\"string\",\"value\":\"ims.mnc001.mcc001.3gppnetwork.org\"}]}'); +INSERT INTO `param_config` VALUES (1702, '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\"}]}'); +INSERT INTO `param_config` VALUES (1703, '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\"}]}'); + SET FOREIGN_KEY_CHECKS = 1; diff --git a/database/install/cdr_event_ims.sql b/database/install/cdr_event_ims.sql index 86a4e9fa..f708f171 100644 --- a/database/install/cdr_event_ims.sql +++ b/database/install/cdr_event_ims.sql @@ -21,16 +21,17 @@ SET FOREIGN_KEY_CHECKS = 0; -- Table structure for cdr_event_ims -- ---------------------------- DROP TABLE IF EXISTS `cdr_event_ims`; -CREATE TABLE `cdr_event_ims` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `ne_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `rm_uid` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `timestamp` int(11) NULL DEFAULT NULL, - `cdr_json` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `created_at` datetime NULL DEFAULT current_timestamp(), +CREATE TABLE `cdr_event_ims` ( + `id` int NOT NULL AUTO_INCREMENT, + `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `ne_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `rm_uid` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `timestamp` int DEFAULT NULL, + `cdr_json` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci, + `created_at` datetime DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`) USING BTREE, - INDEX `id`(`id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 8 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + KEY `id` (`id`) USING BTREE, + KEY `idx_type_timestamp` (`ne_type`,`timestamp`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; SET FOREIGN_KEY_CHECKS = 1; diff --git a/database/install/cdr_event_smf.sql b/database/install/cdr_event_smf.sql index ac16df2a..e0d6a0fb 100644 --- a/database/install/cdr_event_smf.sql +++ b/database/install/cdr_event_smf.sql @@ -21,16 +21,17 @@ SET FOREIGN_KEY_CHECKS = 0; -- Table structure for cdr_event_smf -- ---------------------------- DROP TABLE IF EXISTS `cdr_event_smf`; -CREATE TABLE `cdr_event_smf` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `ne_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `rm_uid` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `timestamp` int(11) NULL DEFAULT NULL, - `cdr_json` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `created_at` datetime NULL DEFAULT current_timestamp(), +CREATE TABLE `cdr_event_smf` ( + `id` int NOT NULL AUTO_INCREMENT, + `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `ne_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `rm_uid` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `timestamp` int DEFAULT NULL, + `cdr_json` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci, + `created_at` datetime DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`) USING BTREE, - INDEX `id`(`id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 13 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + KEY `id` (`id`) USING BTREE, + KEY `idx_type_timestamp` (`ne_type`,`timestamp`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; SET FOREIGN_KEY_CHECKS = 1; diff --git a/database/install/ne_host.sql b/database/install/ne_host.sql index 56a6e773..efe20538 100644 --- a/database/install/ne_host.sql +++ b/database/install/ne_host.sql @@ -30,34 +30,34 @@ CREATE TABLE `ne_host` ( ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '网元主机表' ROW_FORMAT = DYNAMIC; -- 初始数据对应网元 -INSERT INTO `ne_host` VALUES (1, 'ssh', '1', 'OMC_001_22', '172.16.5.100', 22, 'manager', '2', '', '', '', '', 'admin', 1708333292882, NULL, 0); -INSERT INTO `ne_host` VALUES (2, 'telnet', '1', 'OMC_001_4100', '172.16.5.100', 4100, 'admin', '0', '', '', '', '', 'admin', 1708333292882, NULL, 0); -INSERT INTO `ne_host` VALUES (3, 'ssh', '1', 'IMS_001_22', '172.16.5.110', 22, 'manager', '2', '', '', '', '', 'admin', 1708314682742, NULL, 0); -INSERT INTO `ne_host` VALUES (4, 'telnet', '1', 'IMS_001_4100', '172.16.5.110', 4100, 'admin', '0', '', '', '', '', 'admin', 1708333292882, NULL, 0); -INSERT INTO `ne_host` VALUES (5, 'ssh', '1', 'AMF_001_22', '172.16.5.120', 22, 'manager', '2', '', '', '', '', 'admin', 1708314682742, NULL, 0); -INSERT INTO `ne_host` VALUES (6, 'telnet', '1', 'AMF_001_4100', '172.16.5.120', 4100, 'admin', '0', '', '', '', '', 'admin', 1708333292882, NULL, 0); -INSERT INTO `ne_host` VALUES (7, 'ssh', '1', 'AUSF_001_22', '172.16.5.130', 22, 'manager', '2', '', '', '', '', 'admin', 1708333292882, NULL, 0); -INSERT INTO `ne_host` VALUES (8, 'telnet', '1', 'AUSF_001_4100', '172.16.5.130', 4100, 'admin', '0', '', '', '', '', 'admin', 1708333292882, NULL, 0); -INSERT INTO `ne_host` VALUES (9, 'ssh', '1', 'UDM_001_22', '172.16.5.140', 22, 'manager', '2', '', '', '', '', 'admin', 1708333292882, NULL, 0); -INSERT INTO `ne_host` VALUES (10, 'telnet', '1', 'UDM_001_4100', '172.16.5.140', 4100, 'admin', '0', '', '', '', '', 'admin', 1708333292882, NULL, 0); -INSERT INTO `ne_host` VALUES (11, 'ssh', '1', 'SMF_001_22', '172.16.5.150', 22, 'manager', '2', '', '', '', '', 'admin', 1708333292882, NULL, 0); -INSERT INTO `ne_host` VALUES (12, 'telnet', '1', 'SMF_001_4100', '172.16.5.150', 4100, 'admin', '0', '', '', '', '', 'admin', 1708333292882, NULL, 0); -INSERT INTO `ne_host` VALUES (13, 'ssh', '1', 'PCF_001_22', '172.16.5.160', 22, 'manager', '2', '', '', '', '', 'admin', 1708333292882, NULL, 0); -INSERT INTO `ne_host` VALUES (14, 'telnet', '1', 'PCF_001_4100', '172.16.5.160', 4100, 'admin', '0', '', '', '', '', 'admin', 1708333292882, NULL, 0); -INSERT INTO `ne_host` VALUES (15, 'ssh', '1', 'NSSF_001_22', '172.16.5.170', 22, 'manager', '2', '', '', '', '', 'admin', 1708333292882, NULL, 0); -INSERT INTO `ne_host` VALUES (16, 'telnet', '1', 'NSSF_001_4100', '172.16.5.170', 4100, 'admin', '0', '', '', '', '', 'admin', 1708333292882, NULL, 0); -INSERT INTO `ne_host` VALUES (17, 'ssh', '1', 'NRF_001_22', '172.16.5.180', 22, 'manager', '2', '', '', '', '', 'admin', 1708333292882, NULL, 0); -INSERT INTO `ne_host` VALUES (18, 'telnet', '1', 'NRF_001_4100', '172.16.5.180', 4100, 'admin', '0', '', '', '', '', 'admin', 1708333292882, NULL, 0); -INSERT INTO `ne_host` VALUES (19, 'ssh', '1', 'UPF_001_22', '172.16.5.190', 22, 'manager', '2', '', '', '', '', 'admin', 1708333292882, NULL, 0); -INSERT INTO `ne_host` VALUES (20, 'telnet', '1', 'UPF_001_4100', '172.16.5.190', 4100, 'admin', '0', '', '', '', '', 'admin', 1708333292882, NULL, 0); +INSERT INTO `ne_host` VALUES (1, 'ssh', '1', 'OMC_001_22', '127.0.0.1', 22, 'omcuser', '2', '', '', '', '', 'admin', 1708333292882, NULL, 0); +INSERT INTO `ne_host` VALUES (2, 'telnet', '1', 'OMC_001_4100', '127.0.0.1', 4100, 'admin', '0', 'gsjnG8iYpON7T9ae21l955gZi8RRsBWr2WRP31x6ENg=', '', '', '', 'admin', 1708333292882, NULL, 0); +INSERT INTO `ne_host` VALUES (3, 'ssh', '1', 'IMS_001_22', '172.16.5.110', 22, 'omcuser', '2', '', '', '', '', 'admin', 1708314682742, NULL, 0); +INSERT INTO `ne_host` VALUES (4, 'telnet', '1', 'IMS_001_4100', '172.16.5.110', 4100, 'admin', '0', 'gsjnG8iYpON7T9ae21l955gZi8RRsBWr2WRP31x6ENg=', '', '', '', 'admin', 1708333292882, NULL, 0); +INSERT INTO `ne_host` VALUES (5, 'ssh', '1', 'AMF_001_22', '172.16.5.120', 22, 'omcuser', '2', '', '', '', '', 'admin', 1708314682742, NULL, 0); +INSERT INTO `ne_host` VALUES (6, 'telnet', '1', 'AMF_001_4100', '172.16.5.120', 4100, 'admin', '0', 'gsjnG8iYpON7T9ae21l955gZi8RRsBWr2WRP31x6ENg=', '', '', '', 'admin', 1708333292882, NULL, 0); +INSERT INTO `ne_host` VALUES (7, 'ssh', '1', 'AUSF_001_22', '172.16.5.130', 22, 'omcuser', '2', '', '', '', '', 'admin', 1708333292882, NULL, 0); +INSERT INTO `ne_host` VALUES (8, 'telnet', '1', 'AUSF_001_4100', '172.16.5.130', 4100, 'admin', '0', 'gsjnG8iYpON7T9ae21l955gZi8RRsBWr2WRP31x6ENg=', '', '', '', 'admin', 1708333292882, NULL, 0); +INSERT INTO `ne_host` VALUES (9, 'ssh', '1', 'UDM_001_22', '172.16.5.140', 22, 'omcuser', '2', '', '', '', '', 'admin', 1708333292882, NULL, 0); +INSERT INTO `ne_host` VALUES (10, 'telnet', '1', 'UDM_001_4100', '172.16.5.140', 4100, 'admin', '0', 'gsjnG8iYpON7T9ae21l955gZi8RRsBWr2WRP31x6ENg=', '', '', '', 'admin', 1708333292882, NULL, 0); +INSERT INTO `ne_host` VALUES (11, 'ssh', '1', 'SMF_001_22', '172.16.5.150', 22, 'omcuser', '2', '', '', '', '', 'admin', 1708333292882, NULL, 0); +INSERT INTO `ne_host` VALUES (12, 'telnet', '1', 'SMF_001_4100', '172.16.5.150', 4100, 'admin', '0', 'gsjnG8iYpON7T9ae21l955gZi8RRsBWr2WRP31x6ENg=', '', '', '', 'admin', 1708333292882, NULL, 0); +INSERT INTO `ne_host` VALUES (13, 'ssh', '1', 'PCF_001_22', '172.16.5.160', 22, 'omcuser', '2', '', '', '', '', 'admin', 1708333292882, NULL, 0); +INSERT INTO `ne_host` VALUES (14, 'telnet', '1', 'PCF_001_4100', '172.16.5.160', 4100, 'admin', '0', 'gsjnG8iYpON7T9ae21l955gZi8RRsBWr2WRP31x6ENg=', '', '', '', 'admin', 1708333292882, NULL, 0); +INSERT INTO `ne_host` VALUES (15, 'ssh', '1', 'NSSF_001_22', '172.16.5.170', 22, 'omcuser', '2', '', '', '', '', 'admin', 1708333292882, NULL, 0); +INSERT INTO `ne_host` VALUES (16, 'telnet', '1', 'NSSF_001_4100', '172.16.5.170', 4100, 'admin', '0', 'gsjnG8iYpON7T9ae21l955gZi8RRsBWr2WRP31x6ENg=', '', '', '', 'admin', 1708333292882, NULL, 0); +INSERT INTO `ne_host` VALUES (17, 'ssh', '1', 'NRF_001_22', '172.16.5.180', 22, 'omcuser', '2', '', '', '', '', 'admin', 1708333292882, NULL, 0); +INSERT INTO `ne_host` VALUES (18, 'telnet', '1', 'NRF_001_4100', '172.16.5.180', 4100, 'admin', '0', 'gsjnG8iYpON7T9ae21l955gZi8RRsBWr2WRP31x6ENg=', '', '', '', 'admin', 1708333292882, NULL, 0); +INSERT INTO `ne_host` VALUES (19, 'ssh', '1', 'UPF_001_22', '172.16.5.190', 22, 'omcuser', '2', '', '', '', '', 'admin', 1708333292882, NULL, 0); +INSERT INTO `ne_host` VALUES (20, 'telnet', '1', 'UPF_001_4100', '172.16.5.190', 4100, 'admin', '0', 'gsjnG8iYpON7T9ae21l955gZi8RRsBWr2WRP31x6ENg=', '', '', '', 'admin', 1708333292882, NULL, 0); INSERT INTO `ne_host` VALUES (21, 'telnet', '1', 'UPF_001_5002', '172.16.5.190', 5002, 'admin', '0', '', '', '', '', 'admin', 1708333292882, NULL, 0); -INSERT INTO `ne_host` VALUES (22, 'ssh', '1', 'LMF_001_22', '172.16.5.200', 22, 'manager', '2', '', '', '', '', 'admin', 1708333292882, NULL, 0); -INSERT INTO `ne_host` VALUES (23, 'telnet', '1', 'LMF_001_4100', '172.16.5.200', 4100, 'admin', '0', '', '', '', '', 'admin', 1708333292882, NULL, 0); -INSERT INTO `ne_host` VALUES (24, 'ssh', '1', 'NEF_001_22', '172.16.5.210', 22, 'manager', '2', '', '', '', '', 'admin', 1708333292882, NULL, 0); -INSERT INTO `ne_host` VALUES (25, 'telnet', '1', 'NEF_001_4100', '172.16.5.210', 4100, 'admin', '0', '', '', '', '', 'admin', 1708333292882, NULL, 0); -INSERT INTO `ne_host` VALUES (26, 'ssh', '1', 'MME_001_22', '172.16.5.220', 22, 'manager', '2', '', '', '', '', 'admin', 1708333292882, NULL, 0); -INSERT INTO `ne_host` VALUES (27, 'telnet', '1', 'MME_001_4100', '172.16.5.220', 4100, 'admin', '0', '', '', '', '', 'admin', 1708333292882, NULL, 0); -INSERT INTO `ne_host` VALUES (28, 'ssh', '1', 'N3IWF_001_22', '172.16.5.230', 22, 'manager', '2', '', '', '', '', 'admin', 1708333292882, NULL, 0); -INSERT INTO `ne_host` VALUES (29, 'telnet', '1', 'N3IWF_001_4100', '172.16.5.230', 4100, 'admin', '0', '', '', '', '', 'admin', 1708333292882, NULL, 0); +INSERT INTO `ne_host` VALUES (22, 'ssh', '1', 'LMF_001_22', '172.16.5.200', 22, 'omcuser', '2', '', '', '', '', 'admin', 1708333292882, NULL, 0); +INSERT INTO `ne_host` VALUES (23, 'telnet', '1', 'LMF_001_4100', '172.16.5.200', 4100, 'admin', '0', 'gsjnG8iYpON7T9ae21l955gZi8RRsBWr2WRP31x6ENg=', '', '', '', 'admin', 1708333292882, NULL, 0); +INSERT INTO `ne_host` VALUES (24, 'ssh', '1', 'NEF_001_22', '172.16.5.210', 22, 'omcuser', '2', '', '', '', '', 'admin', 1708333292882, NULL, 0); +INSERT INTO `ne_host` VALUES (25, 'telnet', '1', 'NEF_001_4100', '172.16.5.210', 4100, 'admin', '0', 'gsjnG8iYpON7T9ae21l955gZi8RRsBWr2WRP31x6ENg=', '', '', '', 'admin', 1708333292882, NULL, 0); +INSERT INTO `ne_host` VALUES (26, 'ssh', '1', 'MME_001_22', '172.16.5.220', 22, 'omcuser', '2', '', '', '', '', 'admin', 1708333292882, NULL, 0); +INSERT INTO `ne_host` VALUES (27, 'telnet', '1', 'MME_001_4100', '172.16.5.220', 4100, 'admin', '0', 'gsjnG8iYpON7T9ae21l955gZi8RRsBWr2WRP31x6ENg=', '', '', '', 'admin', 1708333292882, NULL, 0); +INSERT INTO `ne_host` VALUES (28, 'ssh', '1', 'N3IWF_001_22', '172.16.5.230', 22, 'omcuser', '2', '', '', '', '', 'admin', 1708333292882, NULL, 0); +INSERT INTO `ne_host` VALUES (29, 'telnet', '1', 'N3IWF_001_4100', '172.16.5.230', 4100, 'admin', '0', 'gsjnG8iYpON7T9ae21l955gZi8RRsBWr2WRP31x6ENg=', '', '', '', 'admin', 1708333292882, NULL, 0); SET FOREIGN_KEY_CHECKS=1; diff --git a/database/install/sys_config.sql b/database/install/sys_config.sql index ac1551ee..22218554 100644 --- a/database/install/sys_config.sql +++ b/database/install/sys_config.sql @@ -1,27 +1,8 @@ --- MariaDB dump 10.19 Distrib 10.6.16-MariaDB, for debian-linux-gnu (x86_64) --- --- Host: 192.168.2.219 Database: omc_db --- ------------------------------------------------------ --- Server version 10.3.38-MariaDB - -/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; -/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; -/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; -/*!40101 SET NAMES utf8mb4 */; -/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; -/*!40103 SET TIME_ZONE='+00:00' */; -/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; -/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; -/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; -/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; - -- -- Table structure for table `sys_config` -- DROP TABLE IF EXISTS `sys_config`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; CREATE TABLE `sys_config` ( `config_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '参数主键', `config_name` varchar(50) DEFAULT '' COMMENT '参数名称', @@ -34,15 +15,14 @@ CREATE TABLE `sys_config` ( `update_time` bigint(20) DEFAULT 0 COMMENT '更新时间', `remark` varchar(500) DEFAULT NULL COMMENT '备注', PRIMARY KEY (`config_id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=111 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='参数配置表'; -/*!40101 SET character_set_client = @saved_cs_client */; +) ENGINE=InnoDB AUTO_INCREMENT=200 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='参数配置表'; -- -- Dumping data for table `sys_config` -- LOCK TABLES `sys_config` WRITE; -/*!40000 ALTER TABLE `sys_config` DISABLE KEYS */; + INSERT INTO `sys_config` VALUES (1, 'config.sys.user.initPassword', 'sys.user.initPassword', 'Abcd@1234..', 'Y', 'supervisor', 1700000000000, NULL, 0, 'config.sys.user.initPasswordRemark'); INSERT INTO `sys_config` VALUES (2, 'config.sys.account.captchaEnabled', 'sys.account.captchaEnabled', 'false', 'Y', 'supervisor', 1700000000000, NULL, 0, 'config.sys.account.captchaEnabledRemark'); INSERT INTO `sys_config` VALUES (3, 'config.sys.account.registerUser', 'sys.account.registerUser', 'false', 'Y', 'supervisor', 1700000000000, NULL, 0, 'config.sys.account.registerUserRemark'); @@ -61,16 +41,7 @@ INSERT INTO `sys_config` VALUES (107, 'config.sys.copyright', 'sys.copyright', ' INSERT INTO `sys_config` VALUES (108, 'config.sys.i18nOpen', 'sys.i18n.open', 'true', 'Y', 'supervisor', 1700000000000, NULL, 0, 'config.sys.i18nOpenRemark'); INSERT INTO `sys_config` VALUES (109, 'config.sys.i18nDefault', 'sys.i18n.default', 'en_US', 'Y', 'supervisor', 1700000000000, NULL, 0, 'config.sys.i18nDefaultRemark'); INSERT INTO `sys_config` VALUES (110, 'config.sys.lockTime', 'sys.lockTime', '0', 'Y', 'supervisor', 1704960008300, 'admin', 1706838764703, 'config.sys.lockTimeRemark'); -/*!40000 ALTER TABLE `sys_config` ENABLE KEYS */; -UNLOCK TABLES; -/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; -/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; -/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; -/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; -/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; -/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; -/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; -/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; +UNLOCK TABLES; -- Dump completed on 2024-03-06 17:27:00 diff --git a/database/install/sys_dept.sql b/database/install/sys_dept.sql index ba68541a..7d699e51 100644 --- a/database/install/sys_dept.sql +++ b/database/install/sys_dept.sql @@ -38,15 +38,15 @@ CREATE TABLE `sys_dept` ( `update_by` varchar(50) DEFAULT '' COMMENT '更新者', `update_time` bigint(20) DEFAULT 0 COMMENT '更新时间', PRIMARY KEY (`dept_id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=100 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='部门表'; +) ENGINE=InnoDB AUTO_INCREMENT=200 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='部门表'; /*!40101 SET character_set_client = @saved_cs_client */; -- -- Dumping data for table `sys_dept` -- -INSERT INTO `sys_dept` VALUES (1, 0, '0', 'dept.root', 0, 'supervisor', NULL, NULL, '1', '0', 'supervisor', 1699348237468, NULL, 0); -INSERT INTO `sys_dept` VALUES (2, 1, '0,1', 'dept.root.item1', 1, 'supervisor', NULL, NULL, '1', '0', 'supervisor', 1699348237468, 'supervisor', 1715570736053); +INSERT INTO `sys_dept` VALUES (100, 0, '0', 'dept.root', 0, 'supervisor', NULL, NULL, '1', '0', 'supervisor', 1699348237468, NULL, 0); +INSERT INTO `sys_dept` VALUES (101, 100, '0,100', 'dept.root.item1', 1, 'supervisor', NULL, NULL, '1', '0', 'supervisor', 1699348237468, 'supervisor', 1715570736053); /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; diff --git a/database/install/sys_dict_data0.sql b/database/install/sys_dict_data0.sql index bd6bbee7..ecc2109e 100644 --- a/database/install/sys_dict_data0.sql +++ b/database/install/sys_dict_data0.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 : omc_db - - Target Server Type : MariaDB - Target Server Version : 100338 (10.3.38-MariaDB) - File Encoding : 65001 - - Date: 19/04/2024 17:07:35 -*/ - SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; @@ -169,10 +153,16 @@ INSERT INTO `sys_dict_data` VALUES (125, 0, 'dictData.ne_version_status.0', '0', INSERT INTO `sys_dict_data` VALUES (126, 1, 'dictData.ne_version_status.1', '1', 'ne_version_status', '', 'success', '1', 'supervisor', 1706620000000, 'supervisor', 1712720201349, ''); INSERT INTO `sys_dict_data` VALUES (127, 1, 'dictData.ne_version_status.2', '2', 'ne_version_status', '', 'purple', '1', 'supervisor', 1706620000000, 'supervisor', 1712720201349, ''); INSERT INTO `sys_dict_data` VALUES (128, 1, 'dictData.ne_version_status.3', '3', 'ne_version_status', '', 'processing', '1', 'supervisor', 1706620000000, 'supervisor', 1712720201349, ''); -INSERT INTO `sys_dict_data` VALUES (129, 1, 'dictData.tenancy.imsi', 'IMSI', 'tenancy_type', NULL, NULL, '1', 'supervisor', 1699350000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (130, 2, 'dictData.tenancy.apn', 'APN', 'tenancy_type', NULL, NULL, '0', 'supervisor', 1699350000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (131, 3, 'dictData.tenancy.slice', 'SLICE', 'tenancy_type', NULL, NULL, '0', 'supervisor', 1699350000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (132, 1, 'dictData.tenancy.ne', 'UPF', 'tenancy_type', NULL, NULL, '1', 'supervisor', 1699350000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (133, 2, 'dictData.tenancy.radio', 'RADIO', 'tenancy_type', NULL, NULL, '1', 'supervisor', 1699350000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (129, 0, 'dictData.udm_sub_cn_type.0', '0', 'udm_sub_cn_type', '', '', '1', 'supervisor', 1712720201349, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (130, 1, 'dictData.udm_sub_cn_type.1', '1', 'udm_sub_cn_type', '', '', '1', 'supervisor', 1712720201349, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (131, 2, 'dictData.udm_sub_cn_type.2', '2', 'udm_sub_cn_type', '', '', '1', 'supervisor', 1712720201349, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (132, 3, 'dictData.udm_sub_cn_type.3', '3', 'udm_sub_cn_type', '', '', '1', 'supervisor', 1712720201349, '', 0, ''); + +-- 多租户 +INSERT INTO `sys_dict_data` VALUES (200, 1, 'dictData.tenancy.imsi', 'IMSI', 'tenancy_type', NULL, NULL, '1', 'supervisor', 1699350000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (201, 2, 'dictData.tenancy.apn', 'APN', 'tenancy_type', NULL, NULL, '0', 'supervisor', 1699350000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (202, 3, 'dictData.tenancy.slice', 'SLICE', 'tenancy_type', NULL, NULL, '0', 'supervisor', 1699350000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (203, 1, 'dictData.tenancy.ne', 'UPF', 'tenancy_type', NULL, NULL, '1', 'supervisor', 1699350000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (204, 2, 'dictData.tenancy.radio', 'RADIO', 'tenancy_type', NULL, NULL, '1', 'supervisor', 1699350000000, NULL, 0, NULL); SET FOREIGN_KEY_CHECKS = 1; diff --git a/database/install/sys_dict_data1_i18n_zh.sql b/database/install/sys_dict_data1_i18n_zh.sql index b7fd9242..65d401cc 100644 --- a/database/install/sys_dict_data1_i18n_zh.sql +++ b/database/install/sys_dict_data1_i18n_zh.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 : omc_db - - Target Server Type : MariaDB - Target Server Version : 100338 (10.3.38-MariaDB) - File Encoding : 65001 - - Date: 19/04/2024 17:07:35 -*/ - SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; @@ -76,7 +60,7 @@ INSERT INTO `sys_dict_data` VALUES (1052, 1052, 'menu.common.edit', '修改', 'i INSERT INTO `sys_dict_data` VALUES (1053, 1053, 'menu.common.delete', '删除', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (1054, 1054, 'menu.common.export', '导出', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (1055, 1055, 'menu.common.import', '导入', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (1056, 1056, 'menu.common.reset', '重置', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (1056, 1056, 'menu.common.resetPwd', '重置密码', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (1057, 1057, 'menu.common.unlock', '账户解锁', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (1058, 1058, 'menu.forcedQuit.batch ', '批量强退', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (1059, 1059, 'menu.forcedQuit.single', '单条强退', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); @@ -271,7 +255,7 @@ INSERT INTO `sys_dict_data` VALUES (1521, 1521, 'dictType.sys_oper_type_remark', INSERT INTO `sys_dict_data` VALUES (1522, 1522, 'dictType.sys_common_status_remark', '登录状态列表', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (1523, 1523, 'dictType.trace_type_remark', '跟踪类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (1524, 1524, 'dictType.operation_log_type_remark', '操作日志类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (1525, 1525, 'dictType.alarm_status_remark', 'alarm_status', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (1525, 1525, 'dictType.alarm_status_remark', '告警日志状态类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (1526, 1526, 'dictType.security_log_type_remark', '安全日志类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (1527, 1527, 'dictType.ne_version_status_remark', '网元软件版本状态', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (1528, 1528, 'dictType.i18n_en_remark', 'Internationalization - English', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); @@ -285,8 +269,8 @@ INSERT INTO `sys_dict_data` VALUES (1535, 1535, 'dictType.sys_role_datascope_rem INSERT INTO `sys_dict_data` VALUES (1536, 1536, 'dictType.noData', '没有可访问字典类型数据!', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (1537, 1537, 'dictType.errNameExists', '操作字典【{name}】失败,字典名称已存在', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (1538, 1538, 'dictType.errTypeExists', '操作字典【{name}】失败,字典类型已存在', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (1600, 1600, 'dept.root', '系统维护部', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (1601, 1601, 'dept.root.item1', '运维一部', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (1600, 1600, 'dept.root', '系统', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (1601, 1601, 'dept.root.item1', '未分配', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (1602, 1602, 'dept.noData', '没有可访问部门数据!', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (1603, 1603, 'dept.errParentDelFlag', '上级部门【{name}】已删除,不允许新增', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (1604, 1604, 'dept.errParentStatus', '上级部门【{name}】停用,不允许新增', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); @@ -306,7 +290,7 @@ INSERT INTO `sys_dict_data` VALUES (1638, 1638, 'config.sys.logo.filePathBrand', INSERT INTO `sys_dict_data` VALUES (1639, 1639, 'config.sys.loginBackground', '系统设置-登录界面背景', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (1640, 1640, 'config.sys.title', '系统设置-系统名称', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (1641, 1641, 'config.sys.copyright', '系统设置-版权声明', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (1642, 1642, 'config.sys.user.initPasswordRemark', '导入用户初始化密码 123456', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (1642, 1642, 'config.sys.user.initPasswordRemark', '导入用户初始化密码', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (1643, 1643, 'config.sys.account.captchaEnabledRemark', '是否开启验证码功能(true开启,false关闭)', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (1644, 1644, 'config.sys.account.registerUserRemark', '是否开启注册用户功能(true开启,false关闭)', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (1645, 1645, 'config.sys.user.maxRetryCountRemark', '密码最大错误次数', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); @@ -316,7 +300,7 @@ INSERT INTO `sys_dict_data` VALUES (1648, 1648, 'config.sys.logo.typeRemark', ' INSERT INTO `sys_dict_data` VALUES (1649, 1649, 'config.sys.logo.filePathIconRemark', '文件支持网络地址图片和内部上传的文件路径', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (1650, 1650, 'config.sys.logo.filePathBrandRemark', '文件支持网络地址图片和内部上传的文件路径', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (1651, 1651, 'config.sys.loginBackgroundRemark', '文件支持网络地址图片和内部上传的文件路径,默认背景用#号', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (1652, 1652, 'config.sys.titleRemark', '系统名称长度限制11位字符串', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (1652, 1652, 'config.sys.titleRemark', '系统名称长度限制20位字符串', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (1653, 1653, 'config.sys.copyrightRemark', '底脚固定条,左侧放置版权声明', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (1654, 1654, 'config..export.id', '参数编号', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (1655, 1655, 'config..export.name', '参数名称', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); @@ -324,7 +308,7 @@ INSERT INTO `sys_dict_data` VALUES (1656, 1656, 'config..export.key', '参数键 INSERT INTO `sys_dict_data` VALUES (1657, 1657, 'config..export.value', '参数键值', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (1658, 1658, 'config..export.type', '系统内置', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (1659, 1659, 'config..export.remark', '参数说明', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (1660, 1660, 'config.sys.titleValue', 'AGrandEMS', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (1660, 1660, 'config.sys.titleValue', 'AGrand EMS', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (1661, 1661, 'config.sys.copyrightValue', 'Copyright ©2023 千通科技', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (1662, 1662, 'config.noData', '没有可访问参数配置数据!', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (1663, 1663, 'config.errKey', '无效 key', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); @@ -553,12 +537,12 @@ INSERT INTO `sys_dict_data` VALUES (2026, 2026, 'menu.monitor.topologyArchitectu INSERT INTO `sys_dict_data` VALUES (2027, 2027, 'menu.alarm', '告警', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (2028, 2028, 'menu.topology', '拓扑', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (2029, 2029, 'config.sys.lockTime', '系统设置-锁屏超时时长', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (2030, 2030, 'config.sys.lockTimeRemark', '无操作时锁屏超时时长,单位(秒)', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (2030, 2030, 'config.sys.lockTimeRemark', '无操作时锁屏超时时长,单位(秒)。0表示无锁屏超时', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (2031, 2031, 'sys.account.captchaType', '账号自助-验证码类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (2032, 2032, 'sys.account.captchaTypeRemark', '使用验证码类型(math数值计算,char字符验证)', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (2033, 2033, 'menu.dashboard', '仪表盘', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (2034, 2034, 'menu.dashboard.overview', '总览', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (2035, 2035, 'menu.dashboard.cdr', 'IMS 话单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (2035, 2035, 'menu.dashboard.imsCDR', 'IMS 话单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (2036, 2036, 'dictType.cdr_sip_code', 'CDR SIP响应代码类别类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (2037, 2037, 'dictType.cdr_call_type', 'CDR 呼叫类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (2038, 2038, 'dictType.ue_auth_code', 'UE 事件认证代码类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); @@ -571,7 +555,7 @@ INSERT INTO `sys_dict_data` VALUES (2044, 2044, 'dictData.cdr_call_type.audio', INSERT INTO `sys_dict_data` VALUES (2045, 2045, 'dictData.cdr_call_type.video', '视频', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (2046, 2046, 'dictData.ue_auth_code.200', '成功', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (2047, 2047, 'dictData.ue_auth_code.001', '网络失败', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (2048, 2048, 'dictData.ue_auth_code.002', '空口接口失败', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (2048, 2048, 'dictData.ue_auth_code.002', '接口失败', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (2049, 2049, 'dictData.ue_auth_code.003', 'MAC失败', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (2050, 2050, 'dictData.ue_auth_code.004', '同步失败', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (2051, 2051, 'dictData.ue_auth_code.005', '不接受非5G认证', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); @@ -632,8 +616,8 @@ INSERT INTO `sys_dict_data` VALUES (2105, 2105, 'log.operate.title.neInfo', '网 INSERT INTO `sys_dict_data` VALUES (2106, 2106, 'neInfo.noData', '没有可访问网元信息数据!', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (2107, 2107, 'neInfo.errKeyExists', '网元信息操作【{key}】失败,同类型下标识已存在', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (2108, 2108, 'log.operate.title.imsCDR', 'IMS-CDR会话', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT INTO `sys_dict_data` VALUES (2109, 2109, 'menu.dashboard.amfUE', '用户事件', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT INTO `sys_dict_data` VALUES (2110, 2110, 'log.operate.title.amfUE', 'AMF-UE事件', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (2109, 2109, 'menu.dashboard.amfUE', '5G UE事件', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (2110, 2110, 'log.operate.title.amfUE', '5G UE事件', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (2111, 2111, 'dictData.ne_info_status.0', '离线', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (2112, 2112, 'dictData.ne_info_status.1', '在线', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (2113, 2113, 'dictData.ne_info_status.2', '等待同步', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); @@ -662,30 +646,46 @@ INSERT INTO `sys_dict_data` VALUES (2135, 2135, 'dictData.ne_version_status.1', INSERT INTO `sys_dict_data` VALUES (2136, 2136, 'dictData.ne_version_status.2', '上一版本', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (2137, 2137, 'dictData.ne_version_status.3', '有新版本', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (2138, 2138, 'menu.fault.event', '事件通知', 'i18n_zh', '', '', '1', 'supervisor', 1717051745866, '', 0, ''); -INSERT INTO `sys_dict_data` VALUES (2139, 2139, 'menu.security.tenant', '租户管理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (2140, 2140, 'menu.security.tenantRemark', '租户管理菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (2141, 2141, 'menu.common.batchadd', '批量增加', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (2142, 2142, 'menu.common.checkdel', '勾选删除', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (2143, 2143, 'menu.common.loaddata', '加载数据', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (2144, 2144, 'menu.common.export', '导出', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (2145, 2145, 'menu.common.checkexport', '勾选导出', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (2146, 2146, 'menu.common.batchdel', '批量删除', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (2147, 2147, 'menu.common.overview', '概览', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (2148, 2148, 'dictData.tenancy.imsi', 'SIM卡', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (2149, 2149, 'dictData.tenancy.apn', '接入点', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (2150, 2150, 'dictData.tenancy.slice', '网络切片', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (2151, 2151, 'dictData.tenancy.ne', 'UPF', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (2152, 2152, 'dictData.tenancy.radio', '无线基站', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (2153, 2153, 'role.tenant', '租户', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (2154, 2154, 'log.operate.title.sysTenant', '租户管理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (2155, 2155, 'menu.tenant.overview', '概览', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (2156, 2156, 'menu.tenant.subscriber', '签约用户', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (2157, 2157, 'menu.tenant.onlineUE', '在线用户', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (2158, 2158, 'menu.tenant.radio', '基站信息', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (2159, 2159, 'menu.tenant.imsCDR', '语音话单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (2160, 2160, 'menu.tenant.smfCDR', '数据话单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (2161, 2161, 'menu.tenant.amfUE', '5G终端事件', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (2162, 2162, 'menu.tenant.mmeUE', '4G终端事件', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (2163, 2163, 'menu.tenant.log', '操作日志', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (2139, 2139, 'menu.dashboard.smfCDR', 'SMF 话单', 'i18n_zh', '', '', '1', 'supervisor', 1717051745866, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (2140, 2140, 'log.operate.title.smfCDR', 'SMF-CDR会话', 'i18n_zh', '', '', '1', 'supervisor', 1717051745866, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (2141, 2141, 'config.sys.i18nDefaultRemark', '国际化默认语言可选择 en_US、zh_CN', 'i18n_zh', '', '', '1', 'supervisor', 1717051745866, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (2142, 2142, 'config.sys.i18nOpenRemark', '是否显示切换的控件 true/false', 'i18n_zh', '', '', '1', 'supervisor', 1717051745866, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (2143, 2143, 'menu.dashboard.mmeUE', '4G UE事件', 'i18n_zh', '', '', '1', 'supervisor', 1718441035866, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (2144, 2144, 'log.operate.title.mmeUE', '4G UE事件', 'i18n_zh', '', '', '1', 'supervisor', 1718441035866, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (2145, 2145, 'menu.system.user.editPost', '修改用户岗位', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (2146, 2146, 'dictType.udm_sub_cn_type', 'UDM Sub CN Type', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (2147, 2147, 'dictData.udm_sub_cn_type.0', '没有5GC和EPC', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (2148, 2148, 'dictData.udm_sub_cn_type.1', '5GC', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (2149, 2149, 'dictData.udm_sub_cn_type.2', 'EPC', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (2150, 2150, 'dictData.udm_sub_cn_type.3', '5GC和EPC', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); + +-- 多租户 +INSERT INTO `sys_dict_data` VALUES (12139, 2139, 'menu.security.tenant', '租户管理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (12140, 2140, 'menu.security.tenantRemark', '租户管理菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (12141, 2141, 'menu.common.batchadd', '批量增加', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (12142, 2142, 'menu.common.checkdel', '勾选删除', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (12143, 2143, 'menu.common.loaddata', '加载数据', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (12144, 2144, 'menu.common.export', '导出', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (12145, 2145, 'menu.common.checkexport', '勾选导出', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (12146, 2146, 'menu.common.batchdel', '批量删除', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (12147, 2147, 'menu.common.overview', '概览', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (12148, 2148, 'dictData.tenancy.imsi', 'SIM卡', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (12149, 2149, 'dictData.tenancy.apn', '接入点', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (12150, 2150, 'dictData.tenancy.slice', '网络切片', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (12151, 2151, 'dictData.tenancy.ne', 'UPF', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (12152, 2152, 'dictData.tenancy.radio', '无线基站', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (12153, 2153, 'role.tenant', '租户', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (12154, 2154, 'log.operate.title.sysTenant', '租户管理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (12155, 2155, 'menu.tenant.overview', '概览', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (12156, 2156, 'menu.tenant.subscriber', '签约用户', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (12157, 2157, 'menu.tenant.onlineUE', '在线用户', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (12158, 2158, 'menu.tenant.radio', '基站信息', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (12159, 2159, 'menu.tenant.imsCDR', '语音话单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (12160, 2160, 'menu.tenant.smfCDR', '数据话单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (12161, 2161, 'menu.tenant.amfUE', '5G终端事件', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (12162, 2162, 'menu.tenant.mmeUE', '4G终端事件', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (12163, 2163, 'menu.tenant.log', '操作日志', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); + + SET FOREIGN_KEY_CHECKS = 1; diff --git a/database/install/sys_dict_data2_i18n_en.sql b/database/install/sys_dict_data2_i18n_en.sql index 399d014d..efb13832 100644 --- a/database/install/sys_dict_data2_i18n_en.sql +++ b/database/install/sys_dict_data2_i18n_en.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 : omc_db - - Target Server Type : MariaDB - Target Server Version : 100338 (10.3.38-MariaDB) - File Encoding : 65001 - - Date: 19/04/2024 17:07:35 -*/ - SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; @@ -76,7 +60,7 @@ INSERT INTO `sys_dict_data` VALUES (3052, 3052, 'menu.common.edit', 'Modify', 'i INSERT INTO `sys_dict_data` VALUES (3053, 3053, 'menu.common.delete', 'Delete', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (3054, 3054, 'menu.common.export', 'Export', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (3055, 3055, 'menu.common.import', 'Import', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (3056, 3056, 'menu.common.reset', 'Reset', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (3056, 3056, 'menu.common.resetPwd', 'Reset Password', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (3057, 3057, 'menu.common.unlock', 'Account Unlock', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (3058, 3058, 'menu.forcedQuit.batch ', 'Batch Undo', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (3059, 3059, 'menu.forcedQuit.single', 'Individual Forced Retirement', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); @@ -271,7 +255,7 @@ INSERT INTO `sys_dict_data` VALUES (3521, 3521, 'dictType.sys_oper_type_remark', INSERT INTO `sys_dict_data` VALUES (3522, 3522, 'dictType.sys_common_status_remark', 'Login Status List', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (3523, 3523, 'dictType.trace_type_remark', 'Trace Types', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (3524, 3524, 'dictType.operation_log_type_remark', 'Operation log type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (3525, 3525, 'dictType.alarm_status_remark', 'alarm_status', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (3525, 3525, 'dictType.alarm_status_remark', 'Alarm Log Status Type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (3526, 3526, 'dictType.security_log_type_remark', 'Security Log Type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (3527, 3527, 'dictType.ne_version_status_remark', 'Network element software version status', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (3528, 3528, 'dictType.i18n_en_remark', 'Internationalization - English', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); @@ -285,8 +269,8 @@ INSERT INTO `sys_dict_data` VALUES (3535, 3535, 'dictType.sys_role_datascope_rem INSERT INTO `sys_dict_data` VALUES (3536, 3536, 'dictType.noData', 'There is no accessible dictionary type data!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (3537, 3537, 'dictType.errNameExists', 'Failed to manipulate dictionary [{name}], dictionary name already exists!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (3538, 3538, 'dictType.errTypeExists', 'Failed to manipulate dictionary [{name}], dictionary type already exists!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (3600, 3600, 'dept.root', 'System Maintenance Department', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (3601, 3601, 'dept.root.item1', 'Operation and Maintenance Department One', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (3600, 3600, 'dept.root', 'System', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (3601, 3601, 'dept.root.item1', 'Unallocated', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (3602, 3602, 'dept.noData', 'There is no accessible department data!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (3603, 3603, 'dept.errParentDelFlag', 'The parent department [{name}] has been deleted and is not allowed to be added.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (3604, 3604, 'dept.errParentStatus', 'Parent department [{name}] is deactivated, additions are not allowed!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); @@ -306,7 +290,7 @@ INSERT INTO `sys_dict_data` VALUES (3638, 3638, 'config.sys.logo.filePathBrand', INSERT INTO `sys_dict_data` VALUES (3639, 3639, 'config.sys.loginBackground', 'System Settings-Login Interface Background', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (3640, 3640, 'config.sys.title', 'System Settings-System Name', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (3641, 3641, 'config.sys.copyright', 'System Settings-Copyright Notice', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (3642, 3642, 'config.sys.user.initPasswordRemark', 'Import user initialization password 123456', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (3642, 3642, 'config.sys.user.initPasswordRemark', 'Import user initialization password', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (3643, 3643, 'config.sys.account.captchaEnabledRemark', 'Whether to enable the verification code function (true on, false off)', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (3644, 3644, 'config.sys.account.registerUserRemark', 'Whether to enable the function of registered users (true on, false off)', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (3645, 3645, 'config.sys.user.maxRetryCountRemark', 'Maximum number of password errors', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); @@ -316,7 +300,7 @@ INSERT INTO `sys_dict_data` VALUES (3648, 3648, 'config.sys.logo.typeRemark', 'F INSERT INTO `sys_dict_data` VALUES (3649, 3649, 'config.sys.logo.filePathIconRemark', 'File support for web address images and file paths for internal uploads', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (3650, 3650, 'config.sys.logo.filePathBrandRemark', 'File support for web address images and paths to internally uploaded files', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (3651, 3651, 'config.sys.loginBackgroundRemark', 'The file supports web address images and internal upload file paths with a # in the default background', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (3652, 3652, 'config.sys.titleRemark', 'System name length limit of 11-digit string', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (3652, 3652, 'config.sys.titleRemark', 'System name length limit of 20-digit string', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (3653, 3653, 'config.sys.copyrightRemark', 'Footer fixing strip with copyright notice on the left side', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (3654, 3654, 'config..export.id', 'ID', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (3655, 3655, 'config..export.name', 'Config Name', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); @@ -324,7 +308,7 @@ INSERT INTO `sys_dict_data` VALUES (3656, 3656, 'config..export.key', 'Config Ke INSERT INTO `sys_dict_data` VALUES (3657, 3657, 'config..export.value', 'Config Value', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (3658, 3658, 'config..export.type', 'Built In', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (3659, 3659, 'config..export.remark', 'Config Description', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (3660, 3660, 'config.sys.titleValue', 'AGrandEMS', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (3660, 3660, 'config.sys.titleValue', 'AGrand EMS', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (3661, 3661, 'config.sys.copyrightValue', 'Copyright ©2023 AGrandTech', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (3662, 3662, 'config.noData', 'No parameter configuration data is accessible!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (3663, 3663, 'config.errKey', 'Invalid key', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); @@ -527,7 +511,7 @@ INSERT INTO `sys_dict_data` VALUES (4000, 4000, 'log.operate.title.neAction', 'N INSERT INTO `sys_dict_data` VALUES (4001, 4001, 'log.operate.title.helpDoc', 'System Usage Documentation', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (4002, 4002, 'menu.ueUser.n3iwf', 'N3IWF Online User', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (4003, 4003, 'menu.ueUser.pcf', 'User PCC Information', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (4004, 4004, 'menu.system.user.editRole', 'Modifying user roles', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (4004, 4004, 'menu.system.user.editRole', 'Modifying User Role', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (4005, 4005, 'config.sys.i18nOpen', 'Internationalization Switching', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (4006, 4006, 'config.sys.i18nDefault', 'Internationalization Default Language', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (4007, 4007, 'user.export.role', 'Role', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); @@ -553,12 +537,12 @@ INSERT INTO `sys_dict_data` VALUES (4026, 4026, 'menu.monitor.topologyArchitectu INSERT INTO `sys_dict_data` VALUES (4027, 4027, 'menu.alarm', 'Alarm', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (4028, 4028, 'menu.topology', 'Topology', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (4029, 4029, 'config.sys.lockTime', 'System Settings - Screen Lock Timeout Duration', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (4030, 4030, 'config.sys.lockTimeRemark', 'Screen lock timeout duration when idle, in seconds.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (4030, 4030, 'config.sys.lockTimeRemark', 'Timeout of lock screen when no operation, unit (sec), 0 means no timeout of lock screen', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (4031, 4031, 'sys.account.captchaType', 'Account Self Service - Captcha Type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (4032, 4032, 'sys.account.captchaTypeRemark', 'Using CAPTCHA types (math numeric calculation, char character validation)', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (4033, 4033, 'menu.dashboard', 'Dashboard', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (4034, 4034, 'menu.dashboard.overview', 'Overview', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (4035, 4035, 'menu.dashboard.cdr', 'IMS CDR', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (4035, 4035, 'menu.dashboard.imsCDR', 'IMS CDR', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (4036, 4036, 'dictType.cdr_sip_code', 'CDR SIP Response Code Category Type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (4037, 4037, 'dictType.cdr_call_type', 'CDR Call Type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (4038, 4038, 'dictType.ue_auth_code', 'UE Event Authentication Code Type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); @@ -571,7 +555,7 @@ INSERT INTO `sys_dict_data` VALUES (4044, 4044, 'dictData.cdr_call_type.audio', INSERT INTO `sys_dict_data` VALUES (4045, 4045, 'dictData.cdr_call_type.video', 'Video', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (4046, 4046, 'dictData.ue_auth_code.200', 'Success', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (4047, 4047, 'dictData.ue_auth_code.001', 'Network Failure', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (4048, 4048, 'dictData.ue_auth_code.002', 'Air Interface Failure', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (4048, 4048, 'dictData.ue_auth_code.002', 'Interface Failure', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (4049, 4049, 'dictData.ue_auth_code.003', 'MAC Failure', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (4050, 4050, 'dictData.ue_auth_code.004', 'Synchronization failure', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (4051, 4051, 'dictData.ue_auth_code.005', 'Non-5G Authentication Not Accepted', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); @@ -632,8 +616,8 @@ INSERT INTO `sys_dict_data` VALUES (4105, 4105, 'log.operate.title.neInfo', 'NE INSERT INTO `sys_dict_data` VALUES (4106, 4106, 'neInfo.noData', 'There is no accessible network element information data!', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (4107, 4107, 'neInfo.errKeyExists', 'NE info operation [{key}] failed, identifier already exists under the same type', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (4108, 4108, 'log.operate.title.imsCDR', 'IMS-CDR session', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT INTO `sys_dict_data` VALUES (4109, 4109, 'menu.dashboard.amfUE', 'UE Event', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT INTO `sys_dict_data` VALUES (4110, 4110, 'log.operate.title.amfUE', 'AMF-UE event', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (4109, 4109, 'menu.dashboard.amfUE', '5G UE Events', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (4110, 4110, 'log.operate.title.amfUE', '5G UE Events', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (4111, 4111, 'dictData.ne_info_status.0', 'Offline', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (4112, 4112, 'dictData.ne_info_status.1', 'Online', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (4113, 4113, 'dictData.ne_info_status.2', 'Wait Sync', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); @@ -652,7 +636,7 @@ INSERT INTO `sys_dict_data` VALUES (4125, 4125, 'dictData.ne_license_status.0', INSERT INTO `sys_dict_data` VALUES (4126, 4126, 'dictData.ne_license_status.1', 'Valid', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (4127, 4127, 'menu.dashboard.mocn', 'MOCN', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (4128, 4128, 'menu.monitor.cdr', 'CDR', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT INTO `sys_dict_data` VALUES (4129, 4129, 'menu.monitor.event', 'Event', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (4129, 4129, 'menu.monitor.event', 'Events', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (4130, 4130, 'post.export.time', 'Creation Time', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (4131, 4131, 'role.export.time', 'Creation Time', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (4132, 4132, 'dictData.ne_host_authMode.2', 'Confidentiality Auth Mode', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); @@ -662,30 +646,46 @@ INSERT INTO `sys_dict_data` VALUES (4135, 4135, 'dictData.ne_version_status.1', INSERT INTO `sys_dict_data` VALUES (4136, 4136, 'dictData.ne_version_status.2', 'Previous', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (4137, 4137, 'dictData.ne_version_status.3', 'Has New', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (4138, 4138, 'menu.fault.event', 'Event Notification', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT INTO `sys_dict_data` VALUES (4139, 4139, 'menu.security.tenant', 'Tenant Management', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT INTO `sys_dict_data` VALUES (4140, 4140, 'menu.security.tenantRemark', 'Tenant Management Menu', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -INSERT INTO `sys_dict_data` VALUES (4141, 4141, 'menu.common.batchadd', 'Batch Add', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (4142, 4142, 'menu.common.checkdel', 'Check Delete', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (4143, 4143, 'menu.common.loaddata', 'Load Data', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (4144, 4144, 'menu.common.export', 'Export', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (4145, 4145, 'menu.common.checkexport', 'Check Export', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (4146, 4146, 'menu.common.batchdel', 'Batch Delete', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (4147, 4147, 'menu.common.overview', 'Overview', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (4148, 4148, 'dictData.tenancy.imsi', 'SIM Card', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (4149, 4149, 'dictData.tenancy.apn', 'Access Point Name', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (4150, 4150, 'dictData.tenancy.slice', 'Network Slice', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (4151, 4151, 'dictData.tenancy.ne', 'UPF', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (4152, 4152, 'dictData.tenancy.radio', 'Radio', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (4153, 4153, 'role.tenant', 'Tenants', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (4154, 4154, 'log.operate.title.sysTenant', 'Tenant Management', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (4155, 4155, 'menu.tenant.overview', 'Overview', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (4156, 4156, 'menu.tenant.subscriber', 'Subscribers', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (4157, 4157, 'menu.tenant.onlineUE', 'Online Information', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (4158, 4158, 'menu.tenant.radio', 'Radio Information', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (4159, 4159, 'menu.tenant.imsCDR', 'IMS CDR', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (4160, 4160, 'menu.tenant.smfCDR', 'SMF CDR', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (4161, 4161, 'menu.tenant.amfUE', '5G UE Event', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (4162, 4162, 'menu.tenant.mmeUE', '4G UE Event', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT INTO `sys_dict_data` VALUES (4163, 4163, 'menu.tenant.log', 'Operation Logs', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (4139, 4139, 'menu.dashboard.smfCDR', 'SMF CDR', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (4140, 4140, 'log.operate.title.smfCDR', 'SMF-CDR session', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (4141, 4141, 'config.sys.i18nDefaultRemark', 'Internationalization default language selectable en_US、zh_CN', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (4142, 4142, 'config.sys.i18nOpenRemark', 'Whether to display switched controls true/false', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (4143, 4143, 'menu.dashboard.mmeUE', '4G UE Events', 'i18n_en', '', '', '1', 'supervisor', 1718441035866, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (4144, 4144, 'log.operate.title.mmeUE', '4G UE Events', 'i18n_en', '', '', '1', 'supervisor', 1718441035866, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (4145, 4145, 'menu.system.user.editPost', 'Modify User Post', 'i18n_en', '', '', '1', 'supervisor', 1718441035866, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (4146, 4146, 'dictType.udm_sub_cn_type', 'UDM Sub CN Type', 'i18n_en', '', '', '1', 'supervisor', 1718441035866, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (4147, 4147, 'dictData.udm_sub_cn_type.0', 'No 5GC and EPC', 'i18n_en', '', '', '1', 'supervisor', 1718441035866, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (4148, 4148, 'dictData.udm_sub_cn_type.1', '5GC', 'i18n_en', '', '', '1', 'supervisor', 1718441035866, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (4149, 4149, 'dictData.udm_sub_cn_type.2', 'EPC', 'i18n_en', '', '', '1', 'supervisor', 1718441035866, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (4150, 4150, 'dictData.udm_sub_cn_type.3', '5GC and EPC', 'i18n_en', '', '', '1', 'supervisor', 1718441035866, '', 0, ''); + +-- 多租户 +INSERT INTO `sys_dict_data` VALUES (14139, 4139, 'menu.security.tenant', 'Tenant Management', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (14140, 4140, 'menu.security.tenantRemark', 'Tenant Management Menu', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (14141, 4141, 'menu.common.batchadd', 'Batch Add', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (14142, 4142, 'menu.common.checkdel', 'Check Delete', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (14143, 4143, 'menu.common.loaddata', 'Load Data', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (14144, 4144, 'menu.common.export', 'Export', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (14145, 4145, 'menu.common.checkexport', 'Check Export', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (14146, 4146, 'menu.common.batchdel', 'Batch Delete', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (14147, 4147, 'menu.common.overview', 'Overview', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (14148, 4148, 'dictData.tenancy.imsi', 'SIM Card', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (14149, 4149, 'dictData.tenancy.apn', 'Access Point Name', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (14150, 4150, 'dictData.tenancy.slice', 'Network Slice', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (14151, 4151, 'dictData.tenancy.ne', 'UPF', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (14152, 4152, 'dictData.tenancy.radio', 'Radio', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (14153, 4153, 'role.tenant', 'Tenants', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (14154, 4154, 'log.operate.title.sysTenant', 'Tenant Management', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (14155, 4155, 'menu.tenant.overview', 'Overview', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (14156, 4156, 'menu.tenant.subscriber', 'Subscribers', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (14157, 4157, 'menu.tenant.onlineUE', 'Online Information', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (14158, 4158, 'menu.tenant.radio', 'Radio Information', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (14159, 4159, 'menu.tenant.imsCDR', 'IMS CDR', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (14160, 4160, 'menu.tenant.smfCDR', 'SMF CDR', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (14161, 4161, 'menu.tenant.amfUE', '5G UE Event', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (14162, 4162, 'menu.tenant.mmeUE', '4G UE Event', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (14163, 4163, 'menu.tenant.log', 'Operation Logs', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); + + SET FOREIGN_KEY_CHECKS = 1; diff --git a/database/install/sys_dict_type.sql b/database/install/sys_dict_type.sql index a4ed580b..32f6b55f 100644 --- a/database/install/sys_dict_type.sql +++ b/database/install/sys_dict_type.sql @@ -1,27 +1,8 @@ --- MariaDB dump 10.19 Distrib 10.6.16-MariaDB, for debian-linux-gnu (x86_64) --- --- Host: 192.168.2.219 Database: omc_db --- ------------------------------------------------------ --- Server version 10.3.38-MariaDB - -/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; -/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; -/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; -/*!40101 SET NAMES utf8mb4 */; -/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; -/*!40103 SET TIME_ZONE='+00:00' */; -/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; -/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; -/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; -/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; - -- -- Table structure for table `sys_dict_type` -- DROP TABLE IF EXISTS `sys_dict_type`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; CREATE TABLE `sys_dict_type` ( `dict_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '字典主键', `dict_name` varchar(50) DEFAULT '' COMMENT '字典名称', @@ -35,7 +16,6 @@ CREATE TABLE `sys_dict_type` ( PRIMARY KEY (`dict_id`) USING BTREE, UNIQUE KEY `dict_type` (`dict_type`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='字典类型表'; -/*!40101 SET character_set_client = @saved_cs_client */; -- -- Dumping data for table `sys_dict_type` @@ -75,19 +55,11 @@ INSERT INTO `sys_dict_type` VALUES (120, 'dictType.ne_host_authMode', 'ne_host_a INSERT INTO `sys_dict_type` VALUES (121, 'dictType.ne_host_cmd_groupId', 'ne_host_cmd_groupId', '1', 'supervisor', 1702020000000, '', 0, ''); INSERT INTO `sys_dict_type` VALUES (122, 'dictType.ne_info_status', 'ne_info_status', '1', 'supervisor', 1702020000000, '', 0, ''); INSERT INTO `sys_dict_type` VALUES (123, 'dictType.ne_license_status', 'ne_license_status', '1', 'supervisor', 1702020000000, '', 0, ''); -INSERT INTO `sys_dict_type` VALUES (124, 'dictType.tenancy_type', 'tenancy_type', '1', 'supervisor', 1702020000000, '', 0, ''); + +-- 多租户 +INSERT INTO `sys_dict_type` VALUES (1000, 'dictType.tenancy_type', 'tenancy_type', '1', 'supervisor', 1702020000000, '', 0, ''); -/*!40000 ALTER TABLE `sys_dict_type` ENABLE KEYS */; UNLOCK TABLES; -/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; - -/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; -/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; -/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; -/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; -/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; -/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; -/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; -- Dump completed on 2024-04-12 21:19:20 diff --git a/database/install/sys_job.sql b/database/install/sys_job.sql index 9a19829a..45fe3456 100644 --- a/database/install/sys_job.sql +++ b/database/install/sys_job.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 : omc_db - - Target Server Type : MariaDB - Target Server Version : 100338 (10.3.38-MariaDB) - File Encoding : 65001 - - Date: 28/04/2024 16:05:50 -*/ - SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; @@ -21,25 +5,25 @@ SET FOREIGN_KEY_CHECKS = 0; -- Table structure for sys_job -- ---------------------------- DROP TABLE IF EXISTS `sys_job`; -CREATE TABLE `sys_job` ( - `job_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '任务ID', +CREATE TABLE `sys_job` ( + `job_id` bigint NOT NULL AUTO_INCREMENT COMMENT '任务ID', `job_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '任务名称', `job_group` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT 'DEFAULT' COMMENT '任务组名', `invoke_target` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '调用目标字符串', - `target_params` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '调用目标传入参数', - `cron_expression` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT 'cron执行表达式', - `misfire_policy` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '3' COMMENT '计划执行错误策略(1立即执行 2执行一次 3放弃执行)', - `concurrent` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '是否并发执行(0禁止 1允许)', - `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '任务状态(0暂停 1正常)', - `save_log` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '是否记录任务日志(0不记录 1记录)', - `create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者', - `create_time` bigint(20) NULL DEFAULT 0 COMMENT '创建时间', - `update_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者', - `update_time` bigint(20) NULL DEFAULT 0 COMMENT '更新时间', - `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注', + `target_params` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '调用目标传入参数', + `cron_expression` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT 'cron执行表达式', + `misfire_policy` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '3' COMMENT '计划执行错误策略(1立即执行 2执行一次 3放弃执行)', + `concurrent` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '是否并发执行(0禁止 1允许)', + `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '任务状态(0暂停 1正常)', + `save_log` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '是否记录任务日志(0不记录 1记录)', + `create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '创建者', + `create_time` bigint DEFAULT '0' COMMENT '创建时间', + `update_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '更新者', + `update_time` bigint DEFAULT '0' COMMENT '更新时间', + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '备注', PRIMARY KEY (`job_id`) USING BTREE, - UNIQUE INDEX `idx_uni_name_group`(`job_name`, `job_group`) USING BTREE COMMENT 'unique index for job_name and job_group' -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '调度任务调度表' ROW_FORMAT = Dynamic; + UNIQUE KEY `idx_uni_name_group` (`job_name`,`job_group`) USING BTREE COMMENT 'unique index for job_name and job_group' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='调度任务调度表'; -- ---------------------------- -- Records of sys_job diff --git a/database/install/sys_menu.sql b/database/install/sys_menu.sql index 1519ed08..af46c3ad 100644 --- a/database/install/sys_menu.sql +++ b/database/install/sys_menu.sql @@ -59,21 +59,21 @@ INSERT INTO `sys_menu` VALUES (106, 'menu.system.dictType', 1, 7, 'dict', 'syste INSERT INTO `sys_menu` VALUES (107, 'menu.system.dictData', 1, 8, 'dict/inline/data/:dictId', 'system/dict/data', '1', '1', 'M', '0', '1', 'system:dict:data', '#', 'supervisor', 1700000000000, NULL, 0, 'menu.system.dictDataRemark'); INSERT INTO `sys_menu` VALUES (108, 'menu.system.paramSet', 1, 9, 'config', 'system/config/index', '1', '1', 'M', '1', '1', 'system:config:list', 'icon-gongnengjieshao', 'supervisor', 1700000000000, NULL, 0, 'menu.system.paramSetRemark'); INSERT INTO `sys_menu` VALUES (111, 'menu.system.systemLog', 1, 11, 'log', NULL, '1', '1', 'D', '0', '0', NULL, '#', 'supervisor', 1700000000000, NULL, 0, 'menu.system.systemLogRemark'); -INSERT INTO `sys_menu` VALUES (112, 'menu.system.systemInfo', 1, 3, 'system-info', 'monitor/system/info', '1', '1', 'M', '1', '1', 'monitor:system:info', 'icon-fuzhidaima', 'supervisor', 1700000000000, NULL, 0, 'menu.system.systemInfoRemark'); -INSERT INTO `sys_menu` VALUES (113, 'menu.system.cacheInfo', 1, 2, 'cache-info', 'monitor/cache/info', '1', '1', 'M', '1', '1', 'monitor:cache:info', 'icon-gongnengjieshao', 'supervisor', 1700000000000, NULL, 0, 'menu.system.cacheInfoRemark'); -INSERT INTO `sys_menu` VALUES (114, 'menu.system.cache', 1, 3, 'cache', 'monitor/cache/index', '1', '1', 'M', '1', '1', 'monitor:cache:list', 'icon-tubiaoku', 'supervisor', 1700000000000, NULL, 0, 'menu.system.cacheRemark'); +INSERT INTO `sys_menu` VALUES (112, 'menu.system.systemInfo', 1, 5, 'system-info', 'monitor/system/info', '1', '1', 'M', '1', '1', 'monitor:system:info', 'icon-fuzhidaima', 'supervisor', 1700000000000, NULL, 0, 'menu.system.systemInfoRemark'); +INSERT INTO `sys_menu` VALUES (113, 'menu.system.cacheInfo', 1, 8, 'cache-info', 'monitor/cache/info', '1', '1', 'M', '1', '1', 'monitor:cache:info', 'icon-gongnengjieshao', 'supervisor', 1700000000000, NULL, 0, 'menu.system.cacheInfoRemark'); +INSERT INTO `sys_menu` VALUES (114, 'menu.system.cache', 1, 9, 'cache', 'monitor/cache/index', '1', '1', 'M', '1', '1', 'monitor:cache:list', 'icon-tubiaoku', 'supervisor', 1700000000000, NULL, 0, 'menu.system.cacheRemark'); INSERT INTO `sys_menu` VALUES (115, 'menu.security.onlineUser', 2113, 2, 'online', 'monitor/online/index', '1', '1', 'M', '1', '1', 'monitor:online:list', 'icon-xiangmuchengyuan', 'supervisor', 1700000000000, NULL, 0, 'menu.security.onlineUserRemark'); -INSERT INTO `sys_menu` VALUES (116, 'menu.system.job', 1, 1, 'job', 'monitor/job/index', '1', '1', 'M', '1', '1', 'monitor:job:list', 'icon-lishi', 'supervisor', 1700000000000, NULL, 0, 'menu.system.jobRemark'); -INSERT INTO `sys_menu` VALUES (117, 'menu.system.jobLog', 1, 2, '/system/job/inline/log/:jobId', 'monitor/job/log', '1', '1', 'M', '0', '1', 'monitor:job:log', '#', 'supervisor', 1700000000000, NULL, 0, 'menu.system.jobLogRemark'); -INSERT INTO `sys_menu` VALUES (500, 'menu.log.operat', 2089, 1, 'operate', 'system/log/operate/index', '1', '1', 'M', '1', '1', 'system:log:operate:list', 'icon-fuzhidaima', 'supervisor', 1700000000000, NULL, 0, 'menu.log.operatRemark'); -INSERT INTO `sys_menu` VALUES (501, 'menu.log.login', 2089, 2, 'login', 'system/log/login/index', '1', '1', 'M', '1', '1', 'system:log:login:list', 'icon-fuzhidaima', 'supervisor', 1700000000000, NULL, 0, 'menu.log.loginRemark'); +INSERT INTO `sys_menu` VALUES (116, 'menu.system.job', 1, 20, 'job', 'monitor/job/index', '1', '1', 'M', '1', '1', 'monitor:job:list', 'icon-lishi', 'supervisor', 1700000000000, NULL, 0, 'menu.system.jobRemark'); +INSERT INTO `sys_menu` VALUES (117, 'menu.system.jobLog', 1, 21, '/system/job/inline/log/:jobId', 'monitor/job/log', '1', '1', 'M', '0', '1', 'monitor:job:log', '#', 'supervisor', 1700000000000, NULL, 0, 'menu.system.jobLogRemark'); +INSERT INTO `sys_menu` VALUES (500, 'menu.log.operat', 2089, 25, 'operate', 'system/log/operate/index', '1', '1', 'M', '1', '1', 'system:log:operate:list', 'icon-fuzhidaima', 'supervisor', 1700000000000, NULL, 0, 'menu.log.operatRemark'); +INSERT INTO `sys_menu` VALUES (501, 'menu.log.login', 2089, 26, 'login', 'system/log/login/index', '1', '1', 'M', '1', '1', 'system:log:login:list', 'icon-fuzhidaima', 'supervisor', 1700000000000, NULL, 0, 'menu.log.loginRemark'); INSERT INTO `sys_menu` VALUES (1000, 'menu.common.query', 100, 1, NULL, NULL, '1', '1', 'B', '1', '1', 'system:user:query', '#', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_menu` VALUES (1001, 'menu.common.add', 100, 2, NULL, NULL, '1', '1', 'B', '1', '1', 'system:user:add', '#', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_menu` VALUES (1002, 'menu.common.edit', 100, 3, NULL, NULL, '1', '1', 'B', '1', '1', 'system:user:edit', '#', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_menu` VALUES (1003, 'menu.common.delete', 100, 4, NULL, NULL, '1', '1', 'B', '1', '1', 'system:user:remove', '#', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_menu` VALUES (1004, 'menu.common.export', 100, 5, NULL, NULL, '1', '1', 'B', '1', '1', 'system:user:export', '#', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_menu` VALUES (1005, 'menu.common.import', 100, 6, NULL, NULL, '1', '1', 'B', '1', '1', 'system:user:import', '#', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT INTO `sys_menu` VALUES (1006, 'menu.common.reset', 100, 7, NULL, NULL, '1', '1', 'B', '1', '1', 'system:user:resetPwd', '#', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_menu` VALUES (1006, 'menu.common.resetPwd', 100, 7, NULL, NULL, '1', '1', 'B', '1', '1', 'system:user:resetPwd', '#', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_menu` VALUES (1007, 'menu.common.query', 101, 1, NULL, NULL, '1', '1', 'B', '1', '1', 'system:role:query', '#', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_menu` VALUES (1008, 'menu.common.add', 101, 2, NULL, NULL, '1', '1', 'B', '1', '1', 'system:role:add', '#', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_menu` VALUES (1009, 'menu.common.edit', 101, 3, NULL, NULL, '1', '1', 'B', '1', '1', 'system:role:edit', '#', 'supervisor', 1700000000000, NULL, 0, NULL); @@ -122,9 +122,9 @@ INSERT INTO `sys_menu` VALUES (1055, 'menu.common.edit', 116, 5, '#', NULL, '1', INSERT INTO `sys_menu` VALUES (1056, 'menu.common.export', 116, 6, '#', NULL, '1', '1', 'B', '1', '1', 'monitor:job:export', '#', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_menu` VALUES (2009, 'menu.ueUser.authUDM', 5, 1, 'auth', 'neUser/auth/index', '1', '1', 'M', '1', '1', 'neUser:auth:index', 'icon-xiangmuchengyuan', 'supervisor', 1700000000000, NULL, 0, 'menu.ueUser.authUDMRemark'); INSERT INTO `sys_menu` VALUES (2010, 'menu.ueUser.subUDM', 5, 2, 'sub', 'neUser/sub/index', '1', '1', 'M', '1', '1', 'neUser:sub:index', 'icon-xiangmuchengyuan', 'supervisor', 1700000000000, NULL, 0, 'menu.ueUser.subUDMRemark'); -INSERT INTO `sys_menu` VALUES (2075, 'menu.config.neManage', 4, 1, 'neManage', 'configManage/neManage/index', '1', '0', 'M', '1', '1', 'configManage:neManage:index', 'icon-biaoqing', 'supervisor', 1700000000000, NULL, 0, 'menu.config.neManageRemark'); +INSERT INTO `sys_menu` VALUES (2075, 'menu.config.neManage', 4, 1, 'neManage', 'configManage/neManage/index', '1', '0', 'M', '1', '0', 'configManage:neManage:index', 'icon-biaoqing', 'supervisor', 1700000000000, NULL, 0, 'menu.config.neManageRemark'); INSERT INTO `sys_menu` VALUES (2078, 'menu.config.backupManage', 4, 3, 'backupManage', 'configManage/backupManage/index', '1', '0', 'M', '1', '1', 'configManage:backupManage:index', 'icon-soutubiao', 'supervisor', 1700000000000, NULL, 0, 'menu.config.backupManageRemark'); -INSERT INTO `sys_menu` VALUES (2079, 'menu.config.softwareManage', 4, 4, 'softwareManage', 'configManage/softwareManage/index', '1', '0', 'M', '1', '1', 'configManage:softwareManage:index', 'icon-huidingbu', 'supervisor', 1700000000000, NULL, 0, 'menu.config.softwareManageRemark'); +INSERT INTO `sys_menu` VALUES (2079, 'menu.config.softwareManage', 4, 4, 'softwareManage', 'configManage/softwareManage/index', '1', '0', 'M', '1', '0', 'configManage:softwareManage:index', 'icon-huidingbu', 'supervisor', 1700000000000, NULL, 0, 'menu.config.softwareManageRemark'); INSERT INTO `sys_menu` VALUES (2080, 'menu.ueUser.onlineIMS', 5, 4, 'ims', 'neUser/ims/index', '1', '0', 'M', '1', '1', 'neUser:ims:index', 'icon-xiangmuchengyuan', 'supervisor', 1700000000000, NULL, 0, 'menu.ueUser.onlineIMSRemark'); INSERT INTO `sys_menu` VALUES (2081, 'menu.ueUser.onlineUE', 5, 6, 'ue', 'neUser/ue/index', '1', '0', 'M', '1', '1', 'neUser:ue:index', 'icon-xiangmuchengyuan', 'supervisor', 1700000000000, NULL, 0, 'menu.ueUser.onlineUERemark'); INSERT INTO `sys_menu` VALUES (2082, 'menu.ueUser.base5G', 5, 7, 'base5G', 'neUser/base5G/index', '1', '0', 'M', '1', '1', 'neUser:base5G:index', 'icon-paixu', 'supervisor', 1700000000000, NULL, 0, 'menu.ueUser.base5GRemark'); @@ -135,10 +135,10 @@ INSERT INTO `sys_menu` VALUES (2086, 'menu.trace.pcap', 2083, 3, 'pcap', 'traceM INSERT INTO `sys_menu` VALUES (2087, 'menu.fault', 0, 2, 'faultManage', NULL, '1', '0', 'D', '1', '1', NULL, 'icon-jinggao', 'supervisor', 1700000000000, NULL, 0, 'menu.faultRemark'); INSERT INTO `sys_menu` VALUES (2088, 'menu.fault.active', 2129, 1, 'active-alarm', 'faultManage/active-alarm/index', '1', '1', 'M', '1', '1', 'faultManage:active-alarm:index', 'icon-wenjian', 'supervisor', 1700000000000, NULL, 0, 'menu.fault.activemRemark'); INSERT INTO `sys_menu` VALUES (2089, 'menu.log', 0, 9, 'logManage', NULL, '1', '0', 'D', '1', '1', NULL, 'icon-fuzhidaima', 'supervisor', 1700000000000, NULL, 0, 'menu.logRemark'); -INSERT INTO `sys_menu` VALUES (2091, 'menu.log.mml', 2089, 2, 'mml', 'logManage/mml/index', '1', '1', 'M', '1', '1', 'logManage:mml:index', 'icon-wocanyu', 'supervisor', 1700000000000, NULL, 0, 'menu.log.mmlRemark'); -INSERT INTO `sys_menu` VALUES (2092, 'menu.log.alarm', 2089, 3, '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, 7, '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, 15, '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 (2091, 'menu.log.mml', 2089, 30, 'mml', 'logManage/mml/index', '1', '1', 'M', '1', '1', 'logManage:mml:index', 'icon-wocanyu', 'supervisor', 1700000000000, NULL, 0, 'menu.log.mmlRemark'); +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 (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', '1', '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'); @@ -154,10 +154,10 @@ INSERT INTO `sys_menu` VALUES (2108, 'menu.mml.ne', 2107, 1, 'neOperate', 'mmlMa INSERT INTO `sys_menu` VALUES (2109, 'menu.mml.udm', 2107, 2, 'udmOperate', 'mmlManage/udmOperate/index', '1', '1', 'M', '1', '1', 'mmlManage:udmOperate:index', 'icon-gonggaodayi', 'supervisor', 1700000000000, NULL, 0, 'menu.mml.udmRemark'); INSERT INTO `sys_menu` VALUES (2110, 'menu.mml.set', 2107, 4, 'mmlSet', 'mmlManage/mmlSet/index', '1', '0', 'M', '1', '1', 'mmlManage:mmlSet:index', 'icon-wofaqi', 'supervisor', 1700000000000, NULL, 0, 'menu.mml.setRemark'); INSERT INTO `sys_menu` VALUES (2111, 'menu.mml.omc', 2107, 3, 'omcOperate', 'mmlManage/omcOperate/index', '1', '1', 'M', '1', '1', 'mmlManage:omcOperate:index', 'icon-huizhiguize', 'supervisor', 1700000000000, NULL, 0, 'menu.mml.omcRemark'); -INSERT INTO `sys_menu` VALUES (2112, 'menu.config.licenseManage', 4, 5, 'license', 'configManage/license/index', '1', '1', 'M', '1', '1', 'configManage/license/index', 'icon-shang', 'supervisor', 1700000000000, NULL, 0, 'menu.config.licenseManageRemark'); +INSERT INTO `sys_menu` VALUES (2112, 'menu.config.licenseManage', 4, 5, 'license', 'configManage/license/index', '1', '1', 'M', '1', '0', 'configManage/license/index', 'icon-shang', 'supervisor', 1700000000000, NULL, 0, 'menu.config.licenseManageRemark'); INSERT INTO `sys_menu` VALUES (2113, 'menu.security', 0, 14, 'security', NULL, '1', '0', 'D', '1', '1', NULL, 'icon-suofang', 'supervisor', 1700000000000, NULL, 0, 'menu.securityRemark'); -INSERT INTO `sys_menu` VALUES (2114, 'menu.system.systemSet', 1, 12, 'setting', 'system/setting/index', '1', '1', 'M', '1', '1', 'system:setting:index', 'icon-piliang', 'supervisor', 1700000000000, NULL, 0, 'menu.system.systemSetRemark'); -INSERT INTO `sys_menu` VALUES (2115, 'menu.system.systemResource', 1, 13, '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 (2114, 'menu.system.systemSet', 1, 60, 'setting', 'system/setting/index', '1', '1', 'M', '1', '1', 'system:setting:index', 'icon-piliang', 'supervisor', 1700000000000, NULL, 0, 'menu.system.systemSetRemark'); +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 (2118, 'menu.config.configNETreeTable', 4, 2, 'configNETreeTable', 'configManage/configParamTreeTable/index', '1', '1', 'M', '1', '1', 'configManage:configParam:index', 'icon-wofaqi', 'supervisor', 1700000000000, NULL, 0, 'menu.config.configNETreeTableRemark'); 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); @@ -169,23 +169,26 @@ INSERT INTO `sys_menu` VALUES (2125, 'menu.neUser.nssfAmf', 5, 11, 'nssfAmf', 'n INSERT INTO `sys_menu` VALUES (2126, 'menu.monitor.topology', 2130, 10, 'topology', 'monitor/topology/index', '1', '0', 'M', '1', '1', 'monitor:topology:index', 'icon-fangda', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_menu` VALUES (2127, 'menu.monitor.topologyBuild', 2130, 30, 'topologyBuild', 'monitor/topologyBuild/index', '1', '0', 'M', '1', '1', 'monitor:topologyBuild:index', 'icon-fangda', 'supervisor', 1700000000000, 'supervisor', 1700000000000, NULL); INSERT INTO `sys_menu` VALUES (2128, 'menu.monitor.topologyArchitecture', 2130, 20, 'topologyArchitecture', 'monitor/topologyArchitecture/index', '1', '0', 'M', '1', '1', 'monitor:topologyArchitecture:index', 'icon-soutubiao', 'supervisor', 1700000000000, 'supervisor', 1700000000000, NULL); -INSERT INTO `sys_menu` VALUES (2129, 'menu.alarm', 2087, 10, 'alarm', NULL, '1', '0', 'D', '1', '1', NULL, 'icon-jinggao', 'supervisor', 1704800000000, 'supervisor', 1704847028995, NULL); -INSERT INTO `sys_menu` VALUES (2130, 'menu.topology', 2087, 20, 'topology', NULL, '1', '0', 'D', '1', '1', NULL, 'icon-anzhuo', 'supervisor', 1704800000000, 'supervisor', 1704847055540, NULL); -INSERT INTO `sys_menu` VALUES (2131, 'menu.dashboard', 2087, 0, 'dashboard', NULL, '1', '0', 'D', '1', '1', NULL, 'icon-soutubiao', 'supervisor', 1705550000000, 'supervisor', 1705550000000, NULL); +INSERT INTO `sys_menu` VALUES (2129, 'menu.alarm', 2087, 20, 'alarm', NULL, '1', '0', 'D', '1', '1', NULL, 'icon-jinggao', 'supervisor', 1704800000000, 'supervisor', 1704847028995, NULL); +INSERT INTO `sys_menu` VALUES (2130, 'menu.topology', 2087, 10, 'topology', NULL, '1', '0', 'D', '1', '1', NULL, 'icon-anzhuo', 'supervisor', 1704800000000, 'supervisor', 1704847055540, NULL); +INSERT INTO `sys_menu` VALUES (2131, 'menu.dashboard', 2087, 15, 'dashboard', NULL, '1', '0', 'D', '1', '1', NULL, 'icon-soutubiao', 'supervisor', 1705550000000, 'supervisor', 1705550000000, NULL); INSERT INTO `sys_menu` VALUES (2132, 'menu.dashboard.overview', 2131, 1, 'overview', 'dashboard/overview/index', '1', '0', 'M', '1', '1', 'dashboard:overview:index', 'icon-paixu', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT INTO `sys_menu` VALUES (2133, 'menu.dashboard.cdr', 2140, 40, 'imsCDR', 'dashboard/imsCDR/index', '1', '0', 'M', '1', '1', 'dashboard:cdr:index', 'icon-paixu', 'supervisor', 1705550000000, 'supervisor', 1712751038982, ''); +INSERT INTO `sys_menu` VALUES (2133, 'menu.dashboard.imsCDR', 2140, 40, 'imsCDR', 'dashboard/imsCDR/index', '1', '0', 'M', '1', '1', 'dashboard:cdr:index', 'icon-paixu', 'supervisor', 1705550000000, 'supervisor', 1712751038982, ''); INSERT INTO `sys_menu` VALUES (2135, 'menu.config.neHost', 4, 15, 'neHost', 'ne/neHost/index', '1', '1', 'M', '1', '1', 'ne:neHost:list', 'icon-fuzhidaima', 'supervisor', 1708583596871, '', 0, ''); INSERT INTO `sys_menu` VALUES (2136, 'menu.config.neHostCommand', 4, 18, 'neHostCommand', 'ne/neHostCommand/index', '1', '0', 'M', '1', '1', 'ne:neHostCommand:list', 'icon-fuzhidaima', 'supervisor', 1708583596871, '', 0, ''); INSERT INTO `sys_menu` VALUES (2137, 'menu.config.neInfo', 4, 14, 'neInfo', 'ne/neInfo/index', '1', '0', 'M', '1', '1', 'ne:neInfo:list', 'icon-fuzhidaima', 'supervisor', 1708583596871, '', 0, ''); INSERT INTO `sys_menu` VALUES (2138, 'menu.dashboard.amfUE', 2141, 1, 'amfUE', 'dashboard/amfUE/index', '1', '0', 'M', '1', '1', 'dashboard:amfUE:index', 'icon-paixu', 'supervisor', 1705550000000, 'supervisor', 1711354049893, ''); -INSERT INTO `sys_menu` VALUES (2140, 'menu.monitor.cdr', 2087, 40, 'cdr', '', '1', '0', 'D', '1', '1', '', 'icon-tubiaoku', 'supervisor', 1711352709786, 'supervisor', 1712751135878, ''); -INSERT INTO `sys_menu` VALUES (2141, 'menu.monitor.event', 2087, 50, 'event', '', '1', '0', 'D', '1', '1', '', 'icon-gengduo', 'supervisor', 1711352768797, 'supervisor', 1712751125648, ''); +INSERT INTO `sys_menu` VALUES (2140, 'menu.monitor.cdr', 2089, 10, 'cdr', '', '1', '0', 'D', '1', '1', '', 'icon-tubiaoku', 'supervisor', 1711352709786, 'supervisor', 1712751135878, ''); +INSERT INTO `sys_menu` VALUES (2141, 'menu.monitor.event', 2089, 20, 'event', '', '1', '0', 'D', '1', '1', '', 'icon-gengduo', 'supervisor', 1711352768797, 'supervisor', 1712751125648, ''); INSERT INTO `sys_menu` VALUES (2142, 'menu.ne.neQuickSetup', 4, 10, 'neQuickSetup', 'ne/neQuickSetup/index', '1', '1', 'M', '1', '1', 'ne:neQuickSetup:list', 'icon-wofaqi', 'supervisor', 1708580000000, '', 0, ''); INSERT INTO `sys_menu` VALUES (2143, 'menu.config.neLicense', 4, 20, 'neLicense', 'ne/neLicense/index', '1', '0', 'M', '1', '1', 'ne:neLicense:list', 'icon-fuzhidaima', 'supervisor', 1708580000000, '', 0, ''); INSERT INTO `sys_menu` VALUES (2144, 'menu.config.neSoftware', 4, 23, 'neSoftware', 'ne/neSoftware/index', '1', '0', 'M', '1', '1', 'ne:neSoftware:list', 'icon-fuzhidaima', 'supervisor', 1708580000000, '', 0, ''); INSERT INTO `sys_menu` VALUES (2145, 'menu.config.neVersion', 4, 26, 'neVersion', 'ne/neVersion/index', '1', '0', 'M', '1', '1', 'ne:neVersion:list', 'icon-fuzhidaima', 'supervisor', 1708580000000, '', 0, ''); INSERT INTO `sys_menu` VALUES (2146, 'menu.ne.neConfPara5G', 4, 8, 'neConfPara5G', 'ne/neConfPara5G/index', '1', '0', 'M', '1', '1', 'ne:neConfPara5G:list', 'icon-wofaqi', 'supervisor', 1708580000000, '', 0, ''); INSERT INTO `sys_menu` VALUES (2147, 'menu.fault.event', 2129, 3, 'event', 'faultManage/event/index', '1', '0', 'M', '1', '1', 'faultManage:event:index', 'icon-tubiaoku', 'supervisor', 1717051993146, '', 0, ''); +INSERT INTO `sys_menu` VALUES (2148, 'menu.dashboard.smfCDR', 2140, 40, 'smfCDR', 'dashboard/smfCDR/index', '1', '0', 'M', '1', '1', 'dashboard:cdr:index', 'icon-paixu', 'supervisor', 1705550000000, 'supervisor', 1712751038982, ''); +INSERT INTO `sys_menu` VALUES (2149, 'menu.dashboard.mmeUE', 2141, 5, 'mmeUE', 'dashboard/mmeUE/index', '1', '0', 'M', '1', '1', 'dashboard:mmeUE:index', 'icon-paixu', 'supervisor', 1705550000000, 'supervisor', 1711354049893, ''); +INSERT INTO `sys_menu` VALUES (2150, 'menu.system.user.editPost', 100, 9, '', '', '1', '1', 'B', '1', '1', 'system:user:editPost', '#', 'supervisor', 1700000000000, '', 0, ''); -- tenant management for admin user INSERT INTO `sys_menu` VALUES (2148, 'menu.security.tenant', 2113, 5, 'tenant', 'system/tenant/index', '1', '1', 'M', '1', '1', 'system:tenant:list', 'icon-yuzhanghao1', 'supervisor', 1700000000000, NULL, 0, 'menu.security.tenantRemark'); diff --git a/database/install/sys_role_dept.sql b/database/install/sys_role_dept.sql index a1a72f19..18311f86 100644 --- a/database/install/sys_role_dept.sql +++ b/database/install/sys_role_dept.sql @@ -1,50 +1,19 @@ --- MariaDB dump 10.19 Distrib 10.6.16-MariaDB, for debian-linux-gnu (x86_64) --- --- Host: 192.168.2.219 Database: omc_db --- ------------------------------------------------------ --- Server version 10.3.38-MariaDB - -/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; -/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; -/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; -/*!40101 SET NAMES utf8mb4 */; -/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; -/*!40103 SET TIME_ZONE='+00:00' */; -/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; -/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; -/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; -/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; - -- -- Table structure for table `sys_role_dept` -- DROP TABLE IF EXISTS `sys_role_dept`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; CREATE TABLE `sys_role_dept` ( `role_id` bigint(20) NOT NULL COMMENT '角色ID', `dept_id` bigint(20) NOT NULL COMMENT '部门ID', PRIMARY KEY (`role_id`,`dept_id`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='角色和部门关联表'; -/*!40101 SET character_set_client = @saved_cs_client */; + -- -- Dumping data for table `sys_role_dept` -- LOCK TABLES `sys_role_dept` WRITE; -/*!40000 ALTER TABLE `sys_role_dept` DISABLE KEYS */; -/*!40000 ALTER TABLE `sys_role_dept` ENABLE KEYS */; UNLOCK TABLES; -/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; - -/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; -/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; -/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; -/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; -/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; -/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; -/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; - -- Dump completed on 2024-03-06 17:27:00 diff --git a/database/install/sys_user.sql b/database/install/sys_user.sql index a9558ce4..6800d8f7 100644 --- a/database/install/sys_user.sql +++ b/database/install/sys_user.sql @@ -43,14 +43,20 @@ CREATE TABLE `sys_user` ( `update_time` bigint(20) NULL DEFAULT 0 COMMENT '更新时间', `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注', PRIMARY KEY (`user_id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 100 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '用户信息表' ROW_FORMAT = Dynamic; +) ENGINE=InnoDB AUTO_INCREMENT=100 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='用户信息表'; -- ---------------------------- -- Records of sys_user -- ---------------------------- -INSERT INTO `sys_user` VALUES (1, NULL, NULL, 'supervisor', 'supervisor', 'sys', '', '', '', '', '$2a$10$QgIcp6yuOEGrEU0TNU12K.uQRLbcufesEU7hiRYlRSSdUO7OAkoTq', '1', '0', '127.0.0.1', 0, '', 0, '', 0, ''); -INSERT INTO `sys_user` VALUES (2, NULL, NULL, 'admin', 'admin', 'sys', '', '', '', '', '$2a$10$QgIcp6yuOEGrEU0TNU12K.uQRLbcufesEU7hiRYlRSSdUO7OAkoTq', '1', '0', '192.168.2.219', 1718778383378, '', 0, 'admin', 1718778383379, ''); -INSERT INTO `sys_user` VALUES (3, NULL, NULL, 'manager', 'manager', 'sys', '', '', '', '', '$2a$10$RND3fUw9Ai.WcggYSI57tu.u3OIlktdPxFzlWkmiHC1paV038t0I2', '1', '0', '127.0.0.1', 0, '', 0, '', 0, ''); -INSERT INTO `sys_user` VALUES (4, NULL, NULL, 'monitor', 'monitor', 'sys', '', '', '', '', '$2a$10$t3zpKQ0olECotFyI1yO43.tCoS0EXoSRBDcqwl09xvrsmn14qFHHy', '1', '0', '127.0.0.1', 0, '', 0, '', 0, ''); -SET FOREIGN_KEY_CHECKS = 1; +LOCK TABLES `sys_user` WRITE; +/*!40000 ALTER TABLE `sys_user` DISABLE KEYS */; +INSERT INTO `sys_user` VALUES (1, 100, 'supervisor', 'supervisor', 'sys', '', '', '', '', '$2a$10$QgIcp6yuOEGrEU0TNU12K.uQRLbcufesEU7hiRYlRSSdUO7OAkoTq', '1', '0', '127.0.0.1', 0, '', 0, '', 0, ''); +INSERT INTO `sys_user` VALUES (2, 100, 'admin', 'admin', 'sys', '', '', '', '', '$2a$10$QgIcp6yuOEGrEU0TNU12K.uQRLbcufesEU7hiRYlRSSdUO7OAkoTq', '1', '0', '127.0.0.1', 0, '', 0, '', 0, ''); +INSERT INTO `sys_user` VALUES (3, 100, 'manager', 'manager', 'sys', '', '', '', '', '$2a$10$RND3fUw9Ai.WcggYSI57tu.u3OIlktdPxFzlWkmiHC1paV038t0I2', '1', '0', '127.0.0.1', 0, '', 0, '', 0, ''); +INSERT INTO `sys_user` VALUES (4, 100, 'monitor', 'monitor', 'sys', '', '', '', '', '$2a$10$t3zpKQ0olECotFyI1yO43.tCoS0EXoSRBDcqwl09xvrsmn14qFHHy', '1', '0', '127.0.0.1', 0, '', 0, '', 0, ''); + +UNLOCK TABLES; + + +-- Dump completed on 2024-03-06 17:27:00 diff --git a/database/install/ue_event_amf.sql b/database/install/ue_event_amf.sql new file mode 100644 index 00000000..a3c09f75 --- /dev/null +++ b/database/install/ue_event_amf.sql @@ -0,0 +1,20 @@ +-- +-- Table structure for table `ue_event_amf` +-- + +DROP TABLE IF EXISTS `ue_event_amf`; +CREATE TABLE `ue_event_amf` ( + `id` int NOT NULL AUTO_INCREMENT, + `ne_type` varchar(32) COLLATE utf8mb4_general_ci DEFAULT NULL, + `ne_name` varchar(64) COLLATE utf8mb4_general_ci DEFAULT NULL, + `rm_uid` varchar(32) COLLATE utf8mb4_general_ci DEFAULT NULL, + `timestamp` int DEFAULT NULL, + `event_type` varchar(16) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT 'auth-result/detach/cm-state', + `event_json` longtext COLLATE utf8mb4_general_ci, + `created_at` datetime DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`id`) USING BTREE, + KEY `id` (`id`) USING BTREE, + KEY `idx_type_timestamp` (`ne_type`,`timestamp`,`event_type`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; + +-- Dump completed on 2024-03-06 17:26:59 diff --git a/database/install/ue_event_mme.sql b/database/install/ue_event_mme.sql new file mode 100644 index 00000000..1bf28283 --- /dev/null +++ b/database/install/ue_event_mme.sql @@ -0,0 +1,20 @@ +-- +-- Table structure for table `ue_event_mme` +-- + +DROP TABLE IF EXISTS `ue_event_mme`; +CREATE TABLE `ue_event_mme` ( + `id` int NOT NULL AUTO_INCREMENT, + `ne_type` varchar(32) COLLATE utf8mb4_general_ci DEFAULT NULL, + `ne_name` varchar(64) COLLATE utf8mb4_general_ci DEFAULT NULL, + `rm_uid` varchar(32) COLLATE utf8mb4_general_ci DEFAULT NULL, + `timestamp` int DEFAULT NULL, + `event_type` varchar(16) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT 'ECM STATUS, EMM STATUS', + `event_json` longtext COLLATE utf8mb4_general_ci, + `created_at` datetime DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`id`) USING BTREE, + KEY `id` (`id`) USING BTREE, + KEY `idx_type_timestamp` (`ne_type`,`timestamp`,`event_type`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; + +-- Dump completed on 2024-06-16 17:26:59 diff --git a/database/upgrade/upg_alarm_event.sql b/database/upgrade/upg_alarm_event.sql index 97a9cb8f..4831afeb 100644 --- a/database/upgrade/upg_alarm_event.sql +++ b/database/upgrade/upg_alarm_event.sql @@ -62,8 +62,7 @@ CREATE TABLE IF NOT EXISTS `alarm_event` ( -- Move event alarm from table alarm to alarm_event START TRANSACTION; -INSERT INTO - `alarm_event` ( +INSERT INTO `alarm_event` ( `alarm_seq`, `alarm_id`, `alarm_title`, diff --git a/database/upgrade/upg_cdr_event_ims.sql b/database/upgrade/upg_cdr_event_ims.sql index dc6935b2..236d0cc4 100644 --- a/database/upgrade/upg_cdr_event_ims.sql +++ b/database/upgrade/upg_cdr_event_ims.sql @@ -21,15 +21,18 @@ SET FOREIGN_KEY_CHECKS = 0; -- Table structure for cdr_event_ims -- ---------------------------- CREATE TABLE IF NOT EXISTS `cdr_event_ims` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `ne_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `rm_uid` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `timestamp` int(11) NULL DEFAULT NULL, - `cdr_json` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `created_at` datetime NULL DEFAULT current_timestamp(), + `id` int NOT NULL AUTO_INCREMENT, + `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `ne_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `rm_uid` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `timestamp` int DEFAULT NULL, + `cdr_json` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci, + `created_at` datetime DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`) USING BTREE, - INDEX `id`(`id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 8 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + KEY `id` (`id`) USING BTREE, + KEY `idx_type_timestamp` (`ne_type`,`timestamp`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +ALTER TABLE `cdr_event_ims` ADD INDEX IF NOT EXISTS `idx_type_timestamp`(`ne_type`, `timestamp`) USING BTREE; SET FOREIGN_KEY_CHECKS = 1; diff --git a/database/upgrade/upg_cdr_event_smf.sql b/database/upgrade/upg_cdr_event_smf.sql index d9da4a13..c4b6870a 100644 --- a/database/upgrade/upg_cdr_event_smf.sql +++ b/database/upgrade/upg_cdr_event_smf.sql @@ -21,15 +21,18 @@ SET FOREIGN_KEY_CHECKS = 0; -- Table structure for cdr_event_smf -- ---------------------------- CREATE TABLE IF NOT EXISTS `cdr_event_smf` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `ne_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `rm_uid` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `timestamp` int(11) NULL DEFAULT NULL, - `cdr_json` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `created_at` datetime NULL DEFAULT current_timestamp(), + `id` int NOT NULL AUTO_INCREMENT, + `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `ne_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `rm_uid` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `timestamp` int DEFAULT NULL, + `cdr_json` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci, + `created_at` datetime DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`) USING BTREE, - INDEX `id`(`id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 13 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + KEY `id` (`id`) USING BTREE, + KEY `idx_type_timestamp` (`ne_type`,`timestamp`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +ALTER TABLE `cdr_event_smf` ADD INDEX IF NOT EXISTS `idx_type_timestamp`(`ne_type`, `timestamp`) USING BTREE; SET FOREIGN_KEY_CHECKS = 1; diff --git a/database/upgrade/upg_chart_graph.sql b/database/upgrade/upg_chart_graph.sql index edfbcfb2..08166821 100644 --- a/database/upgrade/upg_chart_graph.sql +++ b/database/upgrade/upg_chart_graph.sql @@ -20,8 +20,7 @@ SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for chart_graph -- ---------------------------- -DROP TABLE IF EXISTS `chart_graph`; -CREATE TABLE `chart_graph` ( +CREATE TABLE IF NOT EXISTS `chart_graph` ( `row_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '记录ID', `row_type` enum('node','edge','combo') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '记录类型', `row_group` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '记录组名', @@ -51,143 +50,143 @@ CREATE TABLE `chart_graph` ( -- ---------------------------- -- Records of chart_graph -- ---------------------------- -INSERT INTO `chart_graph` VALUES (1, 'node', 'hello', 'node-1', 'rect', 0, -218, -20, '[80,40]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"#ff0000\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ff0000\"}', 'Node-1', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2, 'node', 'hello', 'node-2', 'star', 0, 82, -15, '60', '{\"height\":25,\"img\":\"\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"#2bff00\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#05ff16\"}', 'Node-2', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (3, 'edge', 'hello', 'node-1~1704427926706~node-2', 'polyline', 0, 0, 0, '', '', '', '', '', 'node-1', 'node-2', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"endArrow\":true,\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":5,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#0062ff\"}', '1 to 2', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1177, 'node', 'demo', 'one', 'circle-animate-shape-r', 0, -123.911, 5, '60', '{\"height\":25,\"img\":\"\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"#00ff91\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ff4d4d\"}', 'One', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1178, 'node', 'demo', 'two', 'circle-animate-shape-stroke', 0, 228.652, 10.3481, '60', '{\"height\":25,\"img\":\"\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"#fe5a01\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#9497ff\"}', 'Two', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1179, 'node', 'demo', 'three', 'rect-animate-state', 0, 65, 127, '[80,40]', '{\"height\":25,\"img\":\"\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"#ffffff\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'Three', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#000000\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1180, 'edge', 'demo', 'one~1704764271132~two', 'cubic-animate-line-dash', 0, 0, 0, '', '', '', '', '', 'one', 'two', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"endArrow\":true,\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":1,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#fbfe39\"}', 'one-two', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1181, 'edge', 'demo', 'two~1704764297866~three', 'cubic-animate-circle-move', 0, 0, 0, '', '', '', '', '', 'two', 'three', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":1,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#80f0ff\"}', 'two-three', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1182, 'edge', 'demo', 'three~1704764353721~one', 'line-animate-state', 0, 0, 0, '', '', '', '', '', 'three', 'one', '', '', '', '', '{\"cursor\":\"pointer\",\"lineWidth\":1,\"offset\":20,\"radius\":2,\"stroke\":\"#ffffff\"}', 'three-one', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1725, 'node', '5GC System Architecture', 'Base', 'image-animate-state', 0, -530.671, -66.6639, '[64,64]', '{\"height\":25,\"img\":\"\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/base.svg', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#ffffff\"}', '(R)AN', '{\"offset\":4,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1726, 'node', '5GC System Architecture', 'DN', 'image-animate-state', 0, -529.46, 62.62, '[64,64]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/cloud.svg', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#ffffff\"}', 'DN', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1727, 'node', '5GC System Architecture', 'OMC', 'image-animate-state', 0, -527.746, -346.76, '[64,64]', '{\"height\":25,\"img\":\"\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/service_db.svg', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#783636\"}', 'OMC', '{\"offset\":4,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1728, 'node', '5GC System Architecture', 'IMS', 'rect-animate-state', 23, 22.4671, -231.155, '[80,40]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"#f5222d\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f1212c\"}', 'IMS', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1729, 'node', '5GC System Architecture', 'NSSF', 'rect-animate-state', 22, -116.316, -335.56, '[80,40]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"#f5222d\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'NSSF', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1730, 'node', '5GC System Architecture', 'UPF', 'rect-animate-state', 21, -268.005, -52.6272, '[80,40]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"#f5222d\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'UPF', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1731, 'node', '5GC System Architecture', 'UE', 'image', 14, -532.589, -231.622, '[64,64]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/mobile.svg', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'UE', '{\"offset\":4,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1732, 'node', '5GC System Architecture', 'PCF', 'rect-animate-state', 20, -267.905, -152.894, '[80,40]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"#f5222d\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'PCF', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1733, 'node', '5GC System Architecture', 'SMF', 'rect-animate-state', 19, -117.66, -53.1161, '[80,40]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"#f5222d\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f0212c\"}', 'SMF', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1734, 'node', '5GC System Architecture', 'AMF', 'rect-animate-state', 18, -268.316, -235.06, '[80,40]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"#f5222d\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'AMF', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1735, 'node', '5GC System Architecture', 'UDM', 'rect-animate-state', 17, 19.8172, -333.371, '[80,40]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"#f5222d\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'UDM', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1736, 'node', '5GC System Architecture', 'AUSF', 'rect-animate-state', 16, -269.316, -335.56, '[80,40]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"#f5222d\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'AUSF', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1737, 'node', '5GC System Architecture', 'NRF', 'rect', 15, 26.4865, -150.732, '[80,40]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '5GC', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"#f5222d\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#f5222d\"}', 'NRF', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1738, 'node', '5GC System Architecture', 'LMF', 'rect', 14, -266.158, 48.8341, '[80,40]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '5GC', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"#f5222d\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#f5222d\"}', 'LMF', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1739, 'node', '5GC System Architecture', 'NEF', 'rect', 13, -120.613, -149.621, '[80,40]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"#f5222d\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'NEF', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1740, 'node', '5GC System Architecture', 'MME', 'rect', 12, -118.002, -233.655, '[80,40]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '5GC', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"#f5222d\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#f5222d\"}', 'MME', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1741, 'node', '5GC System Architecture', 'N3IWF', 'rect', 11, 20.4198, -58.2659, '[80,40]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '5GC', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"#f5222d\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#f5222d\"}', 'N3IWF', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1742, 'edge', '5GC System Architecture', '5GC~1704764825481~Base', 'cubic-animate-line-dash', 0, 0, 0, '', '', '', '', '', 'Base', '5GC', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":1,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'N2', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1743, 'edge', '5GC System Architecture', 'UE~1704534736553~AMF', 'cubic-animate-line-dash', 0, 0, 0, '', '', '', '', '', 'UE', 'Base', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":1,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1744, 'edge', '5GC System Architecture', 'RAN~1704534829539~UPF', 'line-animate-state', 0, 0, 0, '', '', '', '', '', 'Base', 'UPF', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":1,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'N3', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1745, 'edge', '5GC System Architecture', 'DN~1704534869360~UPF', 'cubic-animate-line-dash', 0, 0, 0, '', '', '', '', '', 'DN', 'UPF', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":1,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'N6', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1746, 'edge', '5GC System Architecture', 'OMC~1704535021073~5GC', 'line-animate-state', 0, 0, 0, '', '', '', '', '', 'OMC', '5GC', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":1,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1747, 'edge', '5GC System Architecture', 'SMF~1704765447548~UPF', 'line', 0, 0, 0, '', '', '', '', '', 'SMF', 'UPF', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":1,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'N4', '{\"autoRotate\":true,\"position\":\"end\",\"refX\":-12,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1748, 'combo', '5GC System Architecture', '5GC', 'rect', 10, -121.415, -143.363, '[40,40]', '', '', '', '', '', '', '', '[40,45,40,45]', '', '[{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"IMS\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"NSSF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"UPF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"PCF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"SMF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"AMF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"UDM\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"AUSF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"NRF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"LMF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"NEF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"MME\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"N3IWF\",\"itemType\":\"node\"}]', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"grab\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"fill\":\"#ffffff\",\"fillOpacity\":0.1,\"height\":425.39430000000004,\"highlight\":{\"fill\":\"rgb(253, 253, 253)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(253, 253, 253)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"lineWidth\":1,\"r\":212.69715000000002,\"radius\":2,\"selected\":{\"fill\":\"rgb(253, 253, 253)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\",\"width\":376.8029}', 'Core Network', '{\"position\":\"top\",\"refX\":10,\"refY\":10,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1869, 'node', '5GC System Architecture2', 'Base', 'image-animate-state', 0, -530.671, -66.6639, '[64,64]', '{\"height\":25,\"img\":\"\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/base.svg', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#ffffff\"}', '(R)AN', '{\"offset\":4,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1870, 'node', '5GC System Architecture2', 'DN', 'image-animate-state', 0, -544.46, 45.62, '[60,60]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/cloud6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#ffffff\"}', 'DN', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1871, 'node', '5GC System Architecture2', 'OMC', 'image-animate-state', 0, -531.746, -291.76, '[64,64]', '{\"height\":25,\"img\":\"\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/omc6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#783636\"}', 'OMC', '{\"offset\":4,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1872, 'node', '5GC System Architecture2', 'IMS', 'image-animate-state', 23, 32.8038, -208.015, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/ims6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f1212c\"}', 'IMS', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1873, 'node', '5GC System Architecture2', 'NSSF', 'image-animate-state', 22, -103.637, -294.34, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/nssf6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'NSSF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1874, 'node', '5GC System Architecture2', 'UPF', 'image-animate-state', 21, -251.745, -30.487, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/upf6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'UPF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1875, 'node', '5GC System Architecture2', 'UE', 'image', 14, -535.589, -178.622, '[64,64]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/mobile.svg', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'UE', '{\"offset\":4,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1876, 'node', '5GC System Architecture2', 'PCF', 'image-animate-state', 20, -251.569, -121.754, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/pcf6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'PCF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1877, 'node', '5GC System Architecture2', 'SMF', 'image-animate-state', 19, -102.324, -30.9759, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/smf6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f0212c\"}', 'SMF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1878, 'node', '5GC System Architecture2', 'AMF', 'image-animate-state', 18, -252.824, -212.92, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/amf6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'AMF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1879, 'node', '5GC System Architecture2', 'UDM', 'image-animate-state', 17, 30.371, -283.065, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/udm6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'UDM', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1880, 'node', '5GC System Architecture2', 'AUSF', 'image-animate-state', 16, -248.56, -291.872, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/ausf6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'AUSF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1881, 'node', '5GC System Architecture2', 'NRF', 'image-animate-state', 15, 31.0121, -130.814, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/nrf6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'NRF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1882, 'node', '5GC System Architecture2', 'LMF', 'image-animate-state', 14, -247.573, 58.3507, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/lmf.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'LMF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1883, 'node', '5GC System Architecture2', 'NEF', 'image-animate-state', 13, -102.277, -127.481, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/nef6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'NEF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1884, 'node', '5GC System Architecture2', 'MME', 'image-animate-state', 12, -102.666, -211.515, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/mme6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'MME', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1885, 'node', '5GC System Architecture2', 'N3IWF', 'image-animate-state', 11, 32.0232, -36.1257, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/n3iwf61.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'N3IWF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1886, 'edge', '5GC System Architecture2', 'RAN~1704534829539~UPF', 'line-animate-state', 0, 0, 0, '', '', '', '', '', 'Base', 'UPF', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":1,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'N3', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1887, 'edge', '5GC System Architecture2', 'DN~1704534869360~UPF', 'cubic-animate-line-dash', 0, 0, 0, '', '', '', '', '', 'DN', 'UPF', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":1,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'N6', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1888, 'edge', '5GC System Architecture2', 'OMC~1704535021073~5GC', 'line-animate-state', 0, 0, 0, '', '', '', '', '', 'OMC', '5GC', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":1,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1889, 'edge', '5GC System Architecture2', 'SMF~1704765447548~UPF', 'line', 0, 0, 0, '', '', '', '', '', 'SMF', 'UPF', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":1,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'N4', '{\"autoRotate\":true,\"position\":\"end\",\"refX\":-12,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1890, 'edge', '5GC System Architecture2', '5GC~1704764825481~Base', 'cubic-animate-line-dash', 0, 0, 0, '', '', '', '', '', 'Base', '5GC', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":1,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'N2', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1891, 'edge', '5GC System Architecture2', 'UE~1704534736553~AMF', 'cubic-animate-line-dash', 0, 0, 0, '', '', '', '', '', 'UE', 'Base', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":1,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1892, 'combo', '5GC System Architecture2', '5GC', 'rect', 10, -110.01, -117.995, '[40,40]', '', '', '', '', '', '', '', '[40,45,45,40]', '', '[{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"IMS\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"NSSF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"UPF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"PCF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"SMF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"AMF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"UDM\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"AUSF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"NRF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"LMF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"NEF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"MME\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"N3IWF\",\"itemType\":\"node\"}]', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"grab\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"fill\":\"#318c7d\",\"fillOpacity\":0.1,\"height\":402.691157,\"highlight\":{\"fill\":\"rgb(253, 253, 253)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(253, 253, 253)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"lineWidth\":1,\"r\":201.3455785,\"radius\":2,\"selected\":{\"fill\":\"rgb(253, 253, 253)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\",\"width\":345.628003}', 'Core Network', '{\"position\":\"top\",\"refX\":10,\"refY\":10,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2304, 'node', '5GC System Architecture3', 'Base', 'image-animate-state', 0, -371.671, -129.664, '[64,64]', '{\"height\":25,\"img\":\"\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/base.svg', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#ffffff\"}', '(R)AN', '{\"offset\":-4,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2305, 'node', '5GC System Architecture3', 'DN', 'image-animate-state', 0, 325.54, -71.38, '[80,80]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/earth3d-1.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#ffffff\"}', 'DN', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2306, 'node', '5GC System Architecture3', 'OMC', 'image-animate-state', 0, 327.254, -266.76, '[64,64]', '{\"height\":25,\"img\":\"\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/omc6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#783636\"}', 'OMC', '{\"offset\":4,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2307, 'node', '5GC System Architecture3', 'IMS', 'image-animate-state', 24, 40.3237, -119.48, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/ims6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f1212c\"}', 'IMS', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2308, 'node', '5GC System Architecture3', 'NSSF', 'image-animate-state', 23, 49.2396, -291.854, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/nssf6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'NSSF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2309, 'node', '5GC System Architecture3', 'UPF', 'image-animate-state', 22, -31.0923, -18.3086, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/upf6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'UPF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2310, 'node', '5GC System Architecture3', 'UE', 'image', 14, -366.589, 0.378, '[64,64]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/mobile.svg', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'UE', '{\"offset\":-10,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2311, 'node', '5GC System Architecture3', 'PCF', 'image-animate-state', 21, 114.148, -293.478, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/pcf6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'PCF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2312, 'node', '5GC System Architecture3', 'SMF', 'image-animate-state', 20, -28.5624, -116.024, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/smf6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f0212c\"}', 'SMF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2313, 'node', '5GC System Architecture3', 'AMF', 'image-animate-state', 19, -166.037, -115.898, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/amf6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'AMF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2314, 'node', '5GC System Architecture3', 'UDM', 'image-animate-state', 18, -21.8787, -293.295, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/udm6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'UDM', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2315, 'node', '5GC System Architecture3', 'AUSF', 'image-animate-state', 17, -89.9143, -291.872, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/ausf6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'AUSF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2316, 'node', '5GC System Architecture3', 'NRF', 'image-animate-state', 16, 107.349, -117.955, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/nrf6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'NRF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2317, 'node', '5GC System Architecture3', 'LMF', 'image-animate-state', 15, 178.417, -292.559, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/lmf.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'LMF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2318, 'node', '5GC System Architecture3', 'NEF', 'image-animate-state', 14, -89.82, -113.764, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/nef6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'NEF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2319, 'node', '5GC System Architecture3', 'MME', 'image-animate-state', 13, -169.465, -291.82, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/mme6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'MME', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2320, 'node', '5GC System Architecture3', 'N3IWF', 'image-animate-state', 12, 178.037, -121.058, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/n3iwf6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'N3IWF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2321, 'node', '5GC System Architecture3', 'lan', 'image-animate-state', 11, 10, -193, '[300,30]', '{\"height\":25,\"img\":\"\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/router3d-3.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#fafafa\"}', 'Router', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#2e0b7f\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2322, 'edge', '5GC System Architecture3', 'RAN~1704534829539~UPF', 'cubic-animate-line-dash', 0, 0, 0, '', '', '', '', '', 'Base', 'UPF', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":4,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'N3', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":-15,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2323, 'edge', '5GC System Architecture3', 'DN~1704534869360~UPF', 'cubic-animate-line-dash', 0, 0, 0, '', '', '', '', '', 'UPF', 'DN', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":4,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'N6', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":-8,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2324, 'edge', '5GC System Architecture3', 'OMC~1704535021073~5GC', 'line-animate-state', 0, 0, 0, '', '', '', '', '', 'OMC', '5GC', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2325, 'edge', '5GC System Architecture3', 'SMF~1704765447548~UPF', 'line', 0, 0, 0, '', '', '', '', '', 'SMF', 'UPF', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'N4', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":5,\"refY\":-4,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2326, 'edge', '5GC System Architecture3', '5GC~1704764825481~Base', 'cubic-animate-circle-move', 0, 0, 0, '', '', '', '', '', 'Base', 'AMF', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'N2', '{\"autoRotate\":false,\"position\":\"end\",\"refX\":-10,\"refY\":6,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2327, 'edge', '5GC System Architecture3', 'UE~1704534736553~AMF', 'cubic-animate-circle-move', 0, 0, 0, '', '', '', '', '', 'UE', 'Base', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2328, 'edge', '5GC System Architecture3', 'IMS~1706170983368~lan', 'line', 0, 0, 0, '', '', '', '', '', 'IMS', 'lan', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2329, 'edge', '5GC System Architecture3', 'NSSF~1706171150530~lan', 'line', 0, 0, 0, '', '', '', '', '', 'NSSF', 'lan', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2330, 'edge', '5GC System Architecture3', 'PCF~1706171215279~lan', 'line', 0, 0, 0, '', '', '', '', '', 'PCF', 'lan', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2331, 'edge', '5GC System Architecture3', 'AMF~1706171248818~lan', 'line', 0, 0, 0, '', '', '', '', '', 'AMF', 'lan', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2332, 'edge', '5GC System Architecture3', 'AUSF~1706171282723~lan', 'line', 0, 0, 0, '', '', '', '', '', 'AUSF', 'lan', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2333, 'edge', '5GC System Architecture3', 'MME~1706173575994~lan', 'line', 0, 0, 0, '', '', '', '', '', 'MME', 'lan', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2334, 'edge', '5GC System Architecture3', 'NEF~1706173617894~lan', 'line', 0, 0, 0, '', '', '', '', '', 'NEF', 'lan', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2335, 'edge', '5GC System Architecture3', 'SMF~1706173671962~lan', 'line', 0, 0, 0, '', '', '', '', '', 'SMF', 'lan', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2336, 'edge', '5GC System Architecture3', 'UDM~1706173695080~lan', 'line', 0, 0, 0, '', '', '', '', '', 'UDM', 'lan', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2337, 'edge', '5GC System Architecture3', 'NRF~1706173798165~lan', 'line', 0, 0, 0, '', '', '', '', '', 'NRF', 'lan', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2338, 'edge', '5GC System Architecture3', 'N3IWF~1706173823374~lan', 'line', 0, 0, 0, '', '', '', '', '', 'N3IWF', 'lan', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2339, 'edge', '5GC System Architecture3', 'LMF~1706173845506~lan', 'line', 0, 0, 0, '', '', '', '', '', 'LMF', 'lan', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2340, 'edge', '5GC System Architecture3', 'Base~1706176128676~MME', 'cubic-animate-circle-move', 0, 0, 0, '', '', '', '', '', 'Base', 'MME', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'S1-MME', '{\"autoRotate\":false,\"position\":\"end\",\"refX\":-15,\"refY\":-35,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2341, 'combo', '5GC System Architecture3', '5GC', 'rect', 10, 4.47597, -155.893, '[40,40]', '', '', '', '', '', '', '', '[40,40,40,40]', '', '[{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"IMS\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"NSSF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"UPF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"PCF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"SMF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"AMF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"UDM\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"AUSF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"NRF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"LMF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"NEF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"MME\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"N3IWF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"lan\",\"itemType\":\"node\"}]', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"grab\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"fill\":\"#318c7d\",\"fillOpacity\":0.1,\"height\":325.169599,\"highlight\":{\"fill\":\"rgb(253, 253, 253)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(253, 253, 253)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"lineWidth\":1,\"r\":203.94142,\"radius\":2,\"selected\":{\"fill\":\"rgb(253, 253, 253)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\",\"width\":407.88284}', 'Core Network', '{\"position\":\"top\",\"refX\":10,\"refY\":10,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4278, 'node', '5GC System Architecture5', 'Base', 'image-animate-state', 0, -110, -30, '[60,50]', '{\"height\":25,\"img\":\"\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/base.svg', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#ffffff\"}', '(R)AN', '{\"offset\":-5,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4279, 'node', '5GC System Architecture5', 'DN', 'image-animate-state', 0, 240, -30, '[60,60]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/earth3d-1.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#ffffff\"}', 'DN', '{\"offset\":-5,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4280, 'node', '5GC System Architecture5', 'OMC', 'image-animate-state', 0, 240, -330, '[60,60]', '{\"height\":25,\"img\":\"\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/omc62.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#783636\"}', 'OMC', '{\"offset\":-15,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4281, 'node', '5GC System Architecture5', 'NR', 'image', 0, -153, -27, '[30,30]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/lightning1.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#ffffff\"}', '', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#000000\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4282, 'node', '5GC System Architecture5', 'IMS', 'image-animate-state', 11, 170, -130, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/ims62.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f1212c\"}', 'IMS', '{\"offset\":-15,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4283, 'node', '5GC System Architecture5', 'NSSF', 'image-animate-state', 12, -110, -260, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/nssf62.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'NSSF', '{\"offset\":-15,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4284, 'node', '5GC System Architecture5', 'UPF', 'image-animate-state', 13, 30, -30, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/upf6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'UPF', '{\"offset\":-5,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4285, 'node', '5GC System Architecture5', 'PCF', 'image-animate-state', 14, 100, -260, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/pcf62.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'PCF', '{\"offset\":-15,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4286, 'node', '5GC System Architecture5', 'UE', 'image', 14, -201.589, -29.622, '[64,64]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/mobile.svg', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'UE', '{\"offset\":-10,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4287, 'node', '5GC System Architecture5', 'SMF', 'image-animate-state', 15, 30, -130, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/smf62.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f0212c\"}', 'SMF', '{\"offset\":-15,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4288, 'node', '5GC System Architecture5', 'AMF', 'image-animate-state', 16, -110, -130, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/amf62.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'AMF', '{\"offset\":-15,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4289, 'node', '5GC System Architecture5', 'AUSF', 'image-animate-state', 16, -180, -260, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/ausf62.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'AUSF', '{\"offset\":-15,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4290, 'node', '5GC System Architecture5', 'UDM', 'image-animate-state', 17, -40, -260, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/udm62.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'UDM', '{\"offset\":-15,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4291, 'node', '5GC System Architecture5', 'NRF', 'image-animate-state', 19, 100, -130, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/nrf62.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'NRF', '{\"offset\":-15,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4292, 'node', '5GC System Architecture5', 'LMF', 'image-animate-state', 20, 170, -260, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/lmf62.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'LMF', '{\"offset\":-15,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4293, 'node', '5GC System Architecture5', 'NEF', 'image-animate-state', 21, 30, -260, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/nef62.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'NEF', '{\"offset\":-15,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4294, 'node', '5GC System Architecture5', 'MME', 'image-animate-state', 22, -180, -130, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/mme62.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'MME', '{\"offset\":-15,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4295, 'node', '5GC System Architecture5', 'N3IWF', 'image-animate-state', 23, -40, -130, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/n3iwf62.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'N3IWF', '{\"offset\":-15,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4296, 'node', '5GC System Architecture5', 'lan1', 'image', 24, -180, -195, '[70,10]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/lan2.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#ffffff\"}', 'LAN', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#f6f4f4\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4297, 'node', '5GC System Architecture5', 'lan2', 'image', 24, -110, -195, '[70,10]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/lan2.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'LAN', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#f8f7f7\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4298, 'node', '5GC System Architecture5', 'lan3', 'image', 24, -40, -195, '[70,10]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/lan2.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#ffffff\"}', 'LAN', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4299, 'node', '5GC System Architecture5', 'lan4', 'image', 24, 30, -195, '[70,10]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/lan2.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#ffffff\"}', 'LAN', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4300, 'node', '5GC System Architecture5', 'lan5', 'image', 24, 100, -195, '[70,10]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/lan2.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#ffffff\"}', 'LAN', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4301, 'node', '5GC System Architecture5', 'lan6', 'image', 24, 170, -195, '[70,10]', '{\"height\":25,\"img\":\"\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/lan2.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#ffffff\"}', 'LAN', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4302, 'node', '5GC System Architecture5', 'lan7', 'image', 24, 240, -195, '[70,10]', '{\"height\":25,\"img\":\"\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/lan2.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#ffffff\"}', 'LAN', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4303, 'node', '5GC System Architecture5', 'LAN', 'rect', 30, 30, -195, '[500,10]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"#87cefa\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#87cefa\"}', '', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#000000\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4304, 'edge', '5GC System Architecture5', 'NEF~1706494552592~lan5', 'line', 0, 0, 0, '', '', '', '', '', 'NEF', 'lan4', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4305, 'edge', '5GC System Architecture5', 'LMF~1706495015507~lan6', 'polyline', 0, 0, 0, '', '', '', '', '', 'LMF', 'lan6', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4306, 'edge', '5GC System Architecture5', 'OMC~1706495150020~lan7', 'polyline', 0, 0, 0, '', '', '', '', '', 'OMC', 'lan7', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4307, 'edge', '5GC System Architecture5', 'AUSF~1706495243932~lan1', 'polyline', 0, 0, 0, '', '', '', '', '', 'AUSF', 'lan1', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4308, 'edge', '5GC System Architecture5', 'AMF~1706495271064~lan2', 'polyline', 0, 0, 0, '', '', '', '', '', 'AMF', 'lan2', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4309, 'edge', '5GC System Architecture5', 'NRF~1706495715971~lan3', 'polyline', 0, 0, 0, '', '', '', '', '', 'NRF', 'lan5', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4310, 'edge', '5GC System Architecture5', 'SMF~1706495739277~lan4', 'polyline', 0, 0, 0, '', '', '', '', '', 'SMF', 'lan4', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4311, 'edge', '5GC System Architecture5', 'IMS~1706496047466~lan5', 'polyline', 0, 0, 0, '', '', '', '', '', 'IMS', 'lan6', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4312, 'edge', '5GC System Architecture5', 'N3IWF~1706496082968~lan6', 'polyline', 0, 0, 0, '', '', '', '', '', 'N3IWF', 'lan3', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4313, 'edge', '5GC System Architecture5', 'RAN~1704534829539~UPF', 'line-animate-state', 0, 0, 0, '', '', '', '', '', 'Base', 'UPF', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":5,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#7b68ee\"}', 'N3', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":-10,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4314, 'edge', '5GC System Architecture5', 'DN~1704534869360~UPF', 'line-animate-state', 0, 0, 0, '', '', '', '', '', 'UPF', 'DN', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":5,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#7b68ee\"}', 'N6', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":-10,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4315, 'edge', '5GC System Architecture5', 'SMF~1704765447548~UPF', 'line-animate-state', 0, 0, 0, '', '', '', '', '', 'SMF', 'UPF', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'N4', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":3,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4316, 'edge', '5GC System Architecture5', '5GC~1704764825481~Base', 'line-animate-state', 0, 0, 0, '', '', '', '', '', 'Base', 'AMF', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'N2', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":-5,\"refY\":-2,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4317, 'edge', '5GC System Architecture5', 'MME~1706492758830~lan1', 'polyline', 0, 0, 0, '', '', '', '', '', 'MME', 'lan1', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4318, 'edge', '5GC System Architecture5', 'UDM~1706493787944~lan2', 'line', 0, 0, 0, '', '', '', '', '', 'UDM', 'lan3', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4319, 'edge', '5GC System Architecture5', 'PCF~1706494120334~lan3', 'line', 0, 0, 0, '', '', '', '', '', 'PCF', 'lan5', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4320, 'edge', '5GC System Architecture5', 'NSSF~1706494145341~lan4', 'polyline', 0, 0, 0, '', '', '', '', '', 'NSSF', 'lan2', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1, 'node', 'hello', 'node-1', 'rect', 0, -218, -20, '[80,40]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"#ff0000\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ff0000\"}', 'Node-1', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2, 'node', 'hello', 'node-2', 'star', 0, 82, -15, '60', '{\"height\":25,\"img\":\"\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"#2bff00\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#05ff16\"}', 'Node-2', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (3, 'edge', 'hello', 'node-1~1704427926706~node-2', 'polyline', 0, 0, 0, '', '', '', '', '', 'node-1', 'node-2', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"endArrow\":true,\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":5,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#0062ff\"}', '1 to 2', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1177, 'node', 'demo', 'one', 'circle-animate-shape-r', 0, -123.911, 5, '60', '{\"height\":25,\"img\":\"\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"#00ff91\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ff4d4d\"}', 'One', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1178, 'node', 'demo', 'two', 'circle-animate-shape-stroke', 0, 228.652, 10.3481, '60', '{\"height\":25,\"img\":\"\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"#fe5a01\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#9497ff\"}', 'Two', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1179, 'node', 'demo', 'three', 'rect-animate-state', 0, 65, 127, '[80,40]', '{\"height\":25,\"img\":\"\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"#ffffff\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'Three', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#000000\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1180, 'edge', 'demo', 'one~1704764271132~two', 'cubic-animate-line-dash', 0, 0, 0, '', '', '', '', '', 'one', 'two', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"endArrow\":true,\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":1,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#fbfe39\"}', 'one-two', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1181, 'edge', 'demo', 'two~1704764297866~three', 'cubic-animate-circle-move', 0, 0, 0, '', '', '', '', '', 'two', 'three', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":1,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#80f0ff\"}', 'two-three', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1182, 'edge', 'demo', 'three~1704764353721~one', 'line-animate-state', 0, 0, 0, '', '', '', '', '', 'three', 'one', '', '', '', '', '{\"cursor\":\"pointer\",\"lineWidth\":1,\"offset\":20,\"radius\":2,\"stroke\":\"#ffffff\"}', 'three-one', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1725, 'node', '5GC System Architecture', 'Base', 'image-animate-state', 0, -530.671, -66.6639, '[64,64]', '{\"height\":25,\"img\":\"\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/base.svg', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#ffffff\"}', '(R)AN', '{\"offset\":4,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1726, 'node', '5GC System Architecture', 'DN', 'image-animate-state', 0, -529.46, 62.62, '[64,64]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/cloud.svg', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#ffffff\"}', 'DN', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1727, 'node', '5GC System Architecture', 'OMC', 'image-animate-state', 0, -527.746, -346.76, '[64,64]', '{\"height\":25,\"img\":\"\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/service_db.svg', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#783636\"}', 'OMC', '{\"offset\":4,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1728, 'node', '5GC System Architecture', 'IMS', 'rect-animate-state', 23, 22.4671, -231.155, '[80,40]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"#f5222d\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f1212c\"}', 'IMS', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1729, 'node', '5GC System Architecture', 'NSSF', 'rect-animate-state', 22, -116.316, -335.56, '[80,40]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"#f5222d\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'NSSF', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1730, 'node', '5GC System Architecture', 'UPF', 'rect-animate-state', 21, -268.005, -52.6272, '[80,40]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"#f5222d\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'UPF', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1731, 'node', '5GC System Architecture', 'UE', 'image', 14, -532.589, -231.622, '[64,64]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/mobile.svg', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'UE', '{\"offset\":4,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1732, 'node', '5GC System Architecture', 'PCF', 'rect-animate-state', 20, -267.905, -152.894, '[80,40]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"#f5222d\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'PCF', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1733, 'node', '5GC System Architecture', 'SMF', 'rect-animate-state', 19, -117.66, -53.1161, '[80,40]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"#f5222d\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f0212c\"}', 'SMF', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1734, 'node', '5GC System Architecture', 'AMF', 'rect-animate-state', 18, -268.316, -235.06, '[80,40]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"#f5222d\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'AMF', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1735, 'node', '5GC System Architecture', 'UDM', 'rect-animate-state', 17, 19.8172, -333.371, '[80,40]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"#f5222d\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'UDM', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1736, 'node', '5GC System Architecture', 'AUSF', 'rect-animate-state', 16, -269.316, -335.56, '[80,40]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"#f5222d\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'AUSF', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1737, 'node', '5GC System Architecture', 'NRF', 'rect', 15, 26.4865, -150.732, '[80,40]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '5GC', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"#f5222d\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#f5222d\"}', 'NRF', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1738, 'node', '5GC System Architecture', 'LMF', 'rect', 14, -266.158, 48.8341, '[80,40]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '5GC', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"#f5222d\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#f5222d\"}', 'LMF', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1739, 'node', '5GC System Architecture', 'NEF', 'rect', 13, -120.613, -149.621, '[80,40]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"#f5222d\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'NEF', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1740, 'node', '5GC System Architecture', 'MME', 'rect', 12, -118.002, -233.655, '[80,40]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '5GC', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"#f5222d\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#f5222d\"}', 'MME', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1741, 'node', '5GC System Architecture', 'N3IWF', 'rect', 11, 20.4198, -58.2659, '[80,40]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '5GC', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"#f5222d\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#f5222d\"}', 'N3IWF', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1742, 'edge', '5GC System Architecture', '5GC~1704764825481~Base', 'cubic-animate-line-dash', 0, 0, 0, '', '', '', '', '', 'Base', '5GC', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":1,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'N2', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1743, 'edge', '5GC System Architecture', 'UE~1704534736553~AMF', 'cubic-animate-line-dash', 0, 0, 0, '', '', '', '', '', 'UE', 'Base', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":1,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1744, 'edge', '5GC System Architecture', 'RAN~1704534829539~UPF', 'line-animate-state', 0, 0, 0, '', '', '', '', '', 'Base', 'UPF', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":1,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'N3', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1745, 'edge', '5GC System Architecture', 'DN~1704534869360~UPF', 'cubic-animate-line-dash', 0, 0, 0, '', '', '', '', '', 'DN', 'UPF', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":1,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'N6', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1746, 'edge', '5GC System Architecture', 'OMC~1704535021073~5GC', 'line-animate-state', 0, 0, 0, '', '', '', '', '', 'OMC', '5GC', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":1,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1747, 'edge', '5GC System Architecture', 'SMF~1704765447548~UPF', 'line', 0, 0, 0, '', '', '', '', '', 'SMF', 'UPF', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":1,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'N4', '{\"autoRotate\":true,\"position\":\"end\",\"refX\":-12,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1748, 'combo', '5GC System Architecture', '5GC', 'rect', 10, -121.415, -143.363, '[40,40]', '', '', '', '', '', '', '', '[40,45,40,45]', '', '[{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"IMS\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"NSSF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"UPF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"PCF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"SMF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"AMF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"UDM\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"AUSF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"NRF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"LMF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"NEF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"MME\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"N3IWF\",\"itemType\":\"node\"}]', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"grab\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"fill\":\"#ffffff\",\"fillOpacity\":0.1,\"height\":425.39430000000004,\"highlight\":{\"fill\":\"rgb(253, 253, 253)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(253, 253, 253)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"lineWidth\":1,\"r\":212.69715000000002,\"radius\":2,\"selected\":{\"fill\":\"rgb(253, 253, 253)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\",\"width\":376.8029}', 'Core Network', '{\"position\":\"top\",\"refX\":10,\"refY\":10,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1869, 'node', '5GC System Architecture2', 'Base', 'image-animate-state', 0, -530.671, -66.6639, '[64,64]', '{\"height\":25,\"img\":\"\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/base.svg', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#ffffff\"}', '(R)AN', '{\"offset\":4,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1870, 'node', '5GC System Architecture2', 'DN', 'image-animate-state', 0, -544.46, 45.62, '[60,60]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/cloud6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#ffffff\"}', 'DN', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1871, 'node', '5GC System Architecture2', 'OMC', 'image-animate-state', 0, -531.746, -291.76, '[64,64]', '{\"height\":25,\"img\":\"\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/omc6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#783636\"}', 'OMC', '{\"offset\":4,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1872, 'node', '5GC System Architecture2', 'IMS', 'image-animate-state', 23, 32.8038, -208.015, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/ims6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f1212c\"}', 'IMS', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1873, 'node', '5GC System Architecture2', 'NSSF', 'image-animate-state', 22, -103.637, -294.34, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/nssf6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'NSSF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1874, 'node', '5GC System Architecture2', 'UPF', 'image-animate-state', 21, -251.745, -30.487, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/upf6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'UPF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1875, 'node', '5GC System Architecture2', 'UE', 'image', 14, -535.589, -178.622, '[64,64]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/mobile.svg', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'UE', '{\"offset\":4,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1876, 'node', '5GC System Architecture2', 'PCF', 'image-animate-state', 20, -251.569, -121.754, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/pcf6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'PCF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1877, 'node', '5GC System Architecture2', 'SMF', 'image-animate-state', 19, -102.324, -30.9759, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/smf6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f0212c\"}', 'SMF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1878, 'node', '5GC System Architecture2', 'AMF', 'image-animate-state', 18, -252.824, -212.92, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/amf6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'AMF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1879, 'node', '5GC System Architecture2', 'UDM', 'image-animate-state', 17, 30.371, -283.065, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/udm6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'UDM', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1880, 'node', '5GC System Architecture2', 'AUSF', 'image-animate-state', 16, -248.56, -291.872, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/ausf6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'AUSF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1881, 'node', '5GC System Architecture2', 'NRF', 'image-animate-state', 15, 31.0121, -130.814, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/nrf6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'NRF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1882, 'node', '5GC System Architecture2', 'LMF', 'image-animate-state', 14, -247.573, 58.3507, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/lmf.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'LMF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1883, 'node', '5GC System Architecture2', 'NEF', 'image-animate-state', 13, -102.277, -127.481, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/nef6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'NEF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1884, 'node', '5GC System Architecture2', 'MME', 'image-animate-state', 12, -102.666, -211.515, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/mme6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'MME', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1885, 'node', '5GC System Architecture2', 'N3IWF', 'image-animate-state', 11, 32.0232, -36.1257, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/n3iwf61.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'N3IWF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1886, 'edge', '5GC System Architecture2', 'RAN~1704534829539~UPF', 'line-animate-state', 0, 0, 0, '', '', '', '', '', 'Base', 'UPF', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":1,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'N3', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1887, 'edge', '5GC System Architecture2', 'DN~1704534869360~UPF', 'cubic-animate-line-dash', 0, 0, 0, '', '', '', '', '', 'DN', 'UPF', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":1,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'N6', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1888, 'edge', '5GC System Architecture2', 'OMC~1704535021073~5GC', 'line-animate-state', 0, 0, 0, '', '', '', '', '', 'OMC', '5GC', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":1,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1889, 'edge', '5GC System Architecture2', 'SMF~1704765447548~UPF', 'line', 0, 0, 0, '', '', '', '', '', 'SMF', 'UPF', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":1,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'N4', '{\"autoRotate\":true,\"position\":\"end\",\"refX\":-12,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1890, 'edge', '5GC System Architecture2', '5GC~1704764825481~Base', 'cubic-animate-line-dash', 0, 0, 0, '', '', '', '', '', 'Base', '5GC', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":1,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'N2', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1891, 'edge', '5GC System Architecture2', 'UE~1704534736553~AMF', 'cubic-animate-line-dash', 0, 0, 0, '', '', '', '', '', 'UE', 'Base', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":1,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1892, 'combo', '5GC System Architecture2', '5GC', 'rect', 10, -110.01, -117.995, '[40,40]', '', '', '', '', '', '', '', '[40,45,45,40]', '', '[{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"IMS\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"NSSF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"UPF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"PCF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"SMF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"AMF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"UDM\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"AUSF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"NRF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"LMF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"NEF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"MME\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"N3IWF\",\"itemType\":\"node\"}]', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"grab\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"fill\":\"#318c7d\",\"fillOpacity\":0.1,\"height\":402.691157,\"highlight\":{\"fill\":\"rgb(253, 253, 253)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(253, 253, 253)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"lineWidth\":1,\"r\":201.3455785,\"radius\":2,\"selected\":{\"fill\":\"rgb(253, 253, 253)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\",\"width\":345.628003}', 'Core Network', '{\"position\":\"top\",\"refX\":10,\"refY\":10,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2304, 'node', '5GC System Architecture3', 'Base', 'image-animate-state', 0, -371.671, -129.664, '[64,64]', '{\"height\":25,\"img\":\"\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/base.svg', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#ffffff\"}', '(R)AN', '{\"offset\":-4,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2305, 'node', '5GC System Architecture3', 'DN', 'image-animate-state', 0, 325.54, -71.38, '[80,80]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/earth3d-1.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#ffffff\"}', 'DN', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2306, 'node', '5GC System Architecture3', 'OMC', 'image-animate-state', 0, 327.254, -266.76, '[64,64]', '{\"height\":25,\"img\":\"\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/omc6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#783636\"}', 'OMC', '{\"offset\":4,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2307, 'node', '5GC System Architecture3', 'IMS', 'image-animate-state', 24, 40.3237, -119.48, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/ims6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f1212c\"}', 'IMS', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2308, 'node', '5GC System Architecture3', 'NSSF', 'image-animate-state', 23, 49.2396, -291.854, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/nssf6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'NSSF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2309, 'node', '5GC System Architecture3', 'UPF', 'image-animate-state', 22, -31.0923, -18.3086, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/upf6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'UPF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2310, 'node', '5GC System Architecture3', 'UE', 'image', 14, -366.589, 0.378, '[64,64]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/mobile.svg', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'UE', '{\"offset\":-10,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2311, 'node', '5GC System Architecture3', 'PCF', 'image-animate-state', 21, 114.148, -293.478, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/pcf6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'PCF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2312, 'node', '5GC System Architecture3', 'SMF', 'image-animate-state', 20, -28.5624, -116.024, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/smf6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f0212c\"}', 'SMF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2313, 'node', '5GC System Architecture3', 'AMF', 'image-animate-state', 19, -166.037, -115.898, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/amf6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'AMF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2314, 'node', '5GC System Architecture3', 'UDM', 'image-animate-state', 18, -21.8787, -293.295, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/udm6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'UDM', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2315, 'node', '5GC System Architecture3', 'AUSF', 'image-animate-state', 17, -89.9143, -291.872, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/ausf6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'AUSF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2316, 'node', '5GC System Architecture3', 'NRF', 'image-animate-state', 16, 107.349, -117.955, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/nrf6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'NRF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2317, 'node', '5GC System Architecture3', 'LMF', 'image-animate-state', 15, 178.417, -292.559, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/lmf.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'LMF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2318, 'node', '5GC System Architecture3', 'NEF', 'image-animate-state', 14, -89.82, -113.764, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/nef6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'NEF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2319, 'node', '5GC System Architecture3', 'MME', 'image-animate-state', 13, -169.465, -291.82, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/mme6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'MME', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2320, 'node', '5GC System Architecture3', 'N3IWF', 'image-animate-state', 12, 178.037, -121.058, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/n3iwf6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'N3IWF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2321, 'node', '5GC System Architecture3', 'lan', 'image-animate-state', 11, 10, -193, '[300,30]', '{\"height\":25,\"img\":\"\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/router3d-3.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#fafafa\"}', 'Router', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#2e0b7f\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2322, 'edge', '5GC System Architecture3', 'RAN~1704534829539~UPF', 'cubic-animate-line-dash', 0, 0, 0, '', '', '', '', '', 'Base', 'UPF', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":4,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'N3', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":-15,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2323, 'edge', '5GC System Architecture3', 'DN~1704534869360~UPF', 'cubic-animate-line-dash', 0, 0, 0, '', '', '', '', '', 'UPF', 'DN', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":4,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'N6', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":-8,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2324, 'edge', '5GC System Architecture3', 'OMC~1704535021073~5GC', 'line-animate-state', 0, 0, 0, '', '', '', '', '', 'OMC', '5GC', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2325, 'edge', '5GC System Architecture3', 'SMF~1704765447548~UPF', 'line', 0, 0, 0, '', '', '', '', '', 'SMF', 'UPF', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'N4', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":5,\"refY\":-4,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2326, 'edge', '5GC System Architecture3', '5GC~1704764825481~Base', 'cubic-animate-circle-move', 0, 0, 0, '', '', '', '', '', 'Base', 'AMF', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'N2', '{\"autoRotate\":false,\"position\":\"end\",\"refX\":-10,\"refY\":6,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2327, 'edge', '5GC System Architecture3', 'UE~1704534736553~AMF', 'cubic-animate-circle-move', 0, 0, 0, '', '', '', '', '', 'UE', 'Base', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2328, 'edge', '5GC System Architecture3', 'IMS~1706170983368~lan', 'line', 0, 0, 0, '', '', '', '', '', 'IMS', 'lan', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2329, 'edge', '5GC System Architecture3', 'NSSF~1706171150530~lan', 'line', 0, 0, 0, '', '', '', '', '', 'NSSF', 'lan', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2330, 'edge', '5GC System Architecture3', 'PCF~1706171215279~lan', 'line', 0, 0, 0, '', '', '', '', '', 'PCF', 'lan', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2331, 'edge', '5GC System Architecture3', 'AMF~1706171248818~lan', 'line', 0, 0, 0, '', '', '', '', '', 'AMF', 'lan', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2332, 'edge', '5GC System Architecture3', 'AUSF~1706171282723~lan', 'line', 0, 0, 0, '', '', '', '', '', 'AUSF', 'lan', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2333, 'edge', '5GC System Architecture3', 'MME~1706173575994~lan', 'line', 0, 0, 0, '', '', '', '', '', 'MME', 'lan', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2334, 'edge', '5GC System Architecture3', 'NEF~1706173617894~lan', 'line', 0, 0, 0, '', '', '', '', '', 'NEF', 'lan', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2335, 'edge', '5GC System Architecture3', 'SMF~1706173671962~lan', 'line', 0, 0, 0, '', '', '', '', '', 'SMF', 'lan', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2336, 'edge', '5GC System Architecture3', 'UDM~1706173695080~lan', 'line', 0, 0, 0, '', '', '', '', '', 'UDM', 'lan', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2337, 'edge', '5GC System Architecture3', 'NRF~1706173798165~lan', 'line', 0, 0, 0, '', '', '', '', '', 'NRF', 'lan', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2338, 'edge', '5GC System Architecture3', 'N3IWF~1706173823374~lan', 'line', 0, 0, 0, '', '', '', '', '', 'N3IWF', 'lan', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2339, 'edge', '5GC System Architecture3', 'LMF~1706173845506~lan', 'line', 0, 0, 0, '', '', '', '', '', 'LMF', 'lan', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2340, 'edge', '5GC System Architecture3', 'Base~1706176128676~MME', 'cubic-animate-circle-move', 0, 0, 0, '', '', '', '', '', 'Base', 'MME', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'S1-MME', '{\"autoRotate\":false,\"position\":\"end\",\"refX\":-15,\"refY\":-35,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2341, 'combo', '5GC System Architecture3', '5GC', 'rect', 10, 4.47597, -155.893, '[40,40]', '', '', '', '', '', '', '', '[40,40,40,40]', '', '[{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"IMS\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"NSSF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"UPF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"PCF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"SMF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"AMF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"UDM\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"AUSF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"NRF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"LMF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"NEF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"MME\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"N3IWF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"lan\",\"itemType\":\"node\"}]', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"grab\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"fill\":\"#318c7d\",\"fillOpacity\":0.1,\"height\":325.169599,\"highlight\":{\"fill\":\"rgb(253, 253, 253)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(253, 253, 253)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"lineWidth\":1,\"r\":203.94142,\"radius\":2,\"selected\":{\"fill\":\"rgb(253, 253, 253)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\",\"width\":407.88284}', 'Core Network', '{\"position\":\"top\",\"refX\":10,\"refY\":10,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4278, 'node', '5GC System Architecture5', 'Base', 'image-animate-state', 0, -110, -30, '[60,50]', '{\"height\":25,\"img\":\"\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/base.svg', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#ffffff\"}', '(R)AN', '{\"offset\":-5,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4279, 'node', '5GC System Architecture5', 'DN', 'image-animate-state', 0, 240, -30, '[60,60]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/earth3d-1.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#ffffff\"}', 'DN', '{\"offset\":-5,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4280, 'node', '5GC System Architecture5', 'OMC', 'image-animate-state', 0, 240, -330, '[60,60]', '{\"height\":25,\"img\":\"\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/omc62.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#783636\"}', 'OMC', '{\"offset\":-15,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4281, 'node', '5GC System Architecture5', 'NR', 'image', 0, -153, -27, '[30,30]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/lightning1.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#ffffff\"}', '', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#000000\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4282, 'node', '5GC System Architecture5', 'IMS', 'image-animate-state', 11, 170, -130, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/ims62.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f1212c\"}', 'IMS', '{\"offset\":-15,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4283, 'node', '5GC System Architecture5', 'NSSF', 'image-animate-state', 12, -110, -260, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/nssf62.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'NSSF', '{\"offset\":-15,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4284, 'node', '5GC System Architecture5', 'UPF', 'image-animate-state', 13, 30, -30, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/upf6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'UPF', '{\"offset\":-5,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4285, 'node', '5GC System Architecture5', 'PCF', 'image-animate-state', 14, 100, -260, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/pcf62.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'PCF', '{\"offset\":-15,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4286, 'node', '5GC System Architecture5', 'UE', 'image', 14, -201.589, -29.622, '[64,64]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/mobile.svg', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'UE', '{\"offset\":-10,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4287, 'node', '5GC System Architecture5', 'SMF', 'image-animate-state', 15, 30, -130, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/smf62.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f0212c\"}', 'SMF', '{\"offset\":-15,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4288, 'node', '5GC System Architecture5', 'AMF', 'image-animate-state', 16, -110, -130, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/amf62.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'AMF', '{\"offset\":-15,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4289, 'node', '5GC System Architecture5', 'AUSF', 'image-animate-state', 16, -180, -260, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/ausf62.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'AUSF', '{\"offset\":-15,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4290, 'node', '5GC System Architecture5', 'UDM', 'image-animate-state', 17, -40, -260, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/udm62.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'UDM', '{\"offset\":-15,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4291, 'node', '5GC System Architecture5', 'NRF', 'image-animate-state', 19, 100, -130, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/nrf62.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'NRF', '{\"offset\":-15,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4292, 'node', '5GC System Architecture5', 'LMF', 'image-animate-state', 20, 170, -260, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/lmf62.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'LMF', '{\"offset\":-15,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4293, 'node', '5GC System Architecture5', 'NEF', 'image-animate-state', 21, 30, -260, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/nef62.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'NEF', '{\"offset\":-15,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4294, 'node', '5GC System Architecture5', 'MME', 'image-animate-state', 22, -180, -130, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/mme62.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'MME', '{\"offset\":-15,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4295, 'node', '5GC System Architecture5', 'N3IWF', 'image-animate-state', 23, -40, -130, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/n3iwf62.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'N3IWF', '{\"offset\":-15,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4296, 'node', '5GC System Architecture5', 'lan1', 'image', 24, -180, -195, '[70,10]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/lan2.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#ffffff\"}', 'LAN', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#f6f4f4\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4297, 'node', '5GC System Architecture5', 'lan2', 'image', 24, -110, -195, '[70,10]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/lan2.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'LAN', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#f8f7f7\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4298, 'node', '5GC System Architecture5', 'lan3', 'image', 24, -40, -195, '[70,10]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/lan2.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#ffffff\"}', 'LAN', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4299, 'node', '5GC System Architecture5', 'lan4', 'image', 24, 30, -195, '[70,10]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/lan2.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#ffffff\"}', 'LAN', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4300, 'node', '5GC System Architecture5', 'lan5', 'image', 24, 100, -195, '[70,10]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/lan2.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#ffffff\"}', 'LAN', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4301, 'node', '5GC System Architecture5', 'lan6', 'image', 24, 170, -195, '[70,10]', '{\"height\":25,\"img\":\"\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/lan2.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#ffffff\"}', 'LAN', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4302, 'node', '5GC System Architecture5', 'lan7', 'image', 24, 240, -195, '[70,10]', '{\"height\":25,\"img\":\"\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/lan2.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#ffffff\"}', 'LAN', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4303, 'node', '5GC System Architecture5', 'LAN', 'rect', 30, 30, -195, '[500,10]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"#87cefa\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#87cefa\"}', '', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#000000\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4304, 'edge', '5GC System Architecture5', 'NEF~1706494552592~lan5', 'line', 0, 0, 0, '', '', '', '', '', 'NEF', 'lan4', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4305, 'edge', '5GC System Architecture5', 'LMF~1706495015507~lan6', 'polyline', 0, 0, 0, '', '', '', '', '', 'LMF', 'lan6', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4306, 'edge', '5GC System Architecture5', 'OMC~1706495150020~lan7', 'polyline', 0, 0, 0, '', '', '', '', '', 'OMC', 'lan7', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4307, 'edge', '5GC System Architecture5', 'AUSF~1706495243932~lan1', 'polyline', 0, 0, 0, '', '', '', '', '', 'AUSF', 'lan1', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4308, 'edge', '5GC System Architecture5', 'AMF~1706495271064~lan2', 'polyline', 0, 0, 0, '', '', '', '', '', 'AMF', 'lan2', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4309, 'edge', '5GC System Architecture5', 'NRF~1706495715971~lan3', 'polyline', 0, 0, 0, '', '', '', '', '', 'NRF', 'lan5', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4310, 'edge', '5GC System Architecture5', 'SMF~1706495739277~lan4', 'polyline', 0, 0, 0, '', '', '', '', '', 'SMF', 'lan4', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4311, 'edge', '5GC System Architecture5', 'IMS~1706496047466~lan5', 'polyline', 0, 0, 0, '', '', '', '', '', 'IMS', 'lan6', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4312, 'edge', '5GC System Architecture5', 'N3IWF~1706496082968~lan6', 'polyline', 0, 0, 0, '', '', '', '', '', 'N3IWF', 'lan3', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4313, 'edge', '5GC System Architecture5', 'RAN~1704534829539~UPF', 'line-animate-state', 0, 0, 0, '', '', '', '', '', 'Base', 'UPF', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":5,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#7b68ee\"}', 'N3', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":-10,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4314, 'edge', '5GC System Architecture5', 'DN~1704534869360~UPF', 'line-animate-state', 0, 0, 0, '', '', '', '', '', 'UPF', 'DN', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":5,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#7b68ee\"}', 'N6', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":-10,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4315, 'edge', '5GC System Architecture5', 'SMF~1704765447548~UPF', 'line-animate-state', 0, 0, 0, '', '', '', '', '', 'SMF', 'UPF', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'N4', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":3,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4316, 'edge', '5GC System Architecture5', '5GC~1704764825481~Base', 'line-animate-state', 0, 0, 0, '', '', '', '', '', 'Base', 'AMF', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'N2', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":-5,\"refY\":-2,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4317, 'edge', '5GC System Architecture5', 'MME~1706492758830~lan1', 'polyline', 0, 0, 0, '', '', '', '', '', 'MME', 'lan1', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4318, 'edge', '5GC System Architecture5', 'UDM~1706493787944~lan2', 'line', 0, 0, 0, '', '', '', '', '', 'UDM', 'lan3', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4319, 'edge', '5GC System Architecture5', 'PCF~1706494120334~lan3', 'line', 0, 0, 0, '', '', '', '', '', 'PCF', 'lan5', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4320, 'edge', '5GC System Architecture5', 'NSSF~1706494145341~lan4', 'polyline', 0, 0, 0, '', '', '', '', '', 'NSSF', 'lan2', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); SET FOREIGN_KEY_CHECKS = 1; diff --git a/database/upgrade/upg_sys_config.sql b/database/upgrade/upg_sys_config.sql index 67004282..08cdc97d 100644 --- a/database/upgrade/upg_sys_config.sql +++ b/database/upgrade/upg_sys_config.sql @@ -15,7 +15,7 @@ CREATE TABLE IF NOT EXISTS `sys_config` ( `update_time` bigint DEFAULT '0' COMMENT '更新时间', `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '备注', PRIMARY KEY (`config_id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=111 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='参数配置表'; +) ENGINE=InnoDB AUTO_INCREMENT=200 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='参数配置表'; -- 参数配置 INSERT IGNORE INTO `sys_config` VALUES (1, 'config.sys.user.initPassword', 'sys.user.initPassword', 'Abcd@1234..', 'Y', 'supervisor', 1700000000000, NULL, 0, 'config.sys.user.initPasswordRemark'); diff --git a/database/upgrade/upg_sys_dept.sql b/database/upgrade/upg_sys_dept.sql index d7878af8..428e6c82 100644 --- a/database/upgrade/upg_sys_dept.sql +++ b/database/upgrade/upg_sys_dept.sql @@ -17,9 +17,9 @@ CREATE TABLE IF NOT EXISTS `sys_dept` ( `update_by` varchar(50) DEFAULT '' COMMENT '更新者', `update_time` bigint(20) DEFAULT 0 COMMENT '更新时间', PRIMARY KEY (`dept_id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=100 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='部门表'; +) ENGINE=InnoDB AUTO_INCREMENT=200 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='部门表'; -INSERT IGNORE INTO `sys_dept` VALUES (1, 0, '0', 'dept.root', 0, 'supervisor', NULL, NULL, '1', '0', 'supervisor', 1699348237468, NULL, 0); -INSERT IGNORE INTO `sys_dept` VALUES (2, 1, '0,1', 'dept.root.item1', 1, 'supervisor', NULL, NULL, '1', '0', 'supervisor', 1699348237468, 'supervisor', 1715570736053); +INSERT IGNORE INTO `sys_dept` VALUES (100, 0, '0', 'dept.root', 0, 'supervisor', NULL, NULL, '1', '0', 'supervisor', 1699348237468, NULL, 0); +INSERT IGNORE INTO `sys_dept` VALUES (101, 100, '0,100', 'dept.root.item1', 1, 'supervisor', NULL, NULL, '1', '0', 'supervisor', 1699348237468, 'supervisor', 1715570736053); SET FOREIGN_KEY_CHECKS=1; \ No newline at end of file diff --git a/database/upgrade/upg_sys_dict_data0.sql b/database/upgrade/upg_sys_dict_data0.sql index ac6ad4b8..568efdfb 100644 --- a/database/upgrade/upg_sys_dict_data0.sql +++ b/database/upgrade/upg_sys_dict_data0.sql @@ -1,19 +1,3 @@ -/* - Navicat Premium Data Transfer - - Source Server : root@192.168.2.166 - Source Server Type : MariaDB - Source Server Version : 100616 (10.6.16-MariaDB-0ubuntu0.22.04.1) - Source Host : 192.168.2.166:33066 - Source Schema : omc_db - - Target Server Type : MariaDB - Target Server Version : 100616 (10.6.16-MariaDB-0ubuntu0.22.04.1) - File Encoding : 65001 - - Date: 29/01/2024 20:33:11 -*/ - SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; @@ -169,12 +153,12 @@ INSERT IGNORE INTO `sys_dict_data` VALUES (125, 0, 'dictData.ne_version_status.0 INSERT IGNORE INTO `sys_dict_data` VALUES (126, 1, 'dictData.ne_version_status.1', '1', 'ne_version_status', '', 'success', '1', 'supervisor', 1706620000000, 'supervisor', 1712720201349, ''); INSERT IGNORE INTO `sys_dict_data` VALUES (127, 1, 'dictData.ne_version_status.2', '2', 'ne_version_status', '', 'purple', '1', 'supervisor', 1706620000000, 'supervisor', 1712720201349, ''); INSERT IGNORE INTO `sys_dict_data` VALUES (128, 1, 'dictData.ne_version_status.3', '3', 'ne_version_status', '', 'processing', '1', 'supervisor', 1706620000000, 'supervisor', 1712720201349, ''); +INSERT IGNORE INTO `sys_dict_data` VALUES (129, 0, 'dictData.udm_sub_cn_type.0', '0', 'udm_sub_cn_type', '', '', '1', 'supervisor', 1712720201349, '', 0, ''); +INSERT IGNORE INTO `sys_dict_data` VALUES (130, 1, 'dictData.udm_sub_cn_type.1', '1', 'udm_sub_cn_type', '', '', '1', 'supervisor', 1712720201349, '', 0, ''); +INSERT IGNORE INTO `sys_dict_data` VALUES (131, 2, 'dictData.udm_sub_cn_type.2', '2', 'udm_sub_cn_type', '', '', '1', 'supervisor', 1712720201349, '', 0, ''); +INSERT IGNORE INTO `sys_dict_data` VALUES (132, 3, 'dictData.udm_sub_cn_type.3', '3', 'udm_sub_cn_type', '', '', '1', 'supervisor', 1712720201349, '', 0, ''); -- 指定记录条件更新 -UPDATE `sys_dict_data` SET `tag_type` = 'error' WHERE `dict_code` = 118; -UPDATE `sys_dict_data` SET `tag_type` = 'processing' WHERE `dict_code` = 119; -UPDATE `sys_dict_data` SET `tag_type` = 'warning' WHERE `dict_code` = 120; -UPDATE `sys_dict_data` SET `tag_type` = '' WHERE `dict_code` = 121; REPLACE INTO `sys_dict_data` VALUES (129, 1, 'dictData.tenancy.imsi', 'IMSI', 'tenancy_type', NULL, NULL, '1', 'supervisor', 1699350000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (130, 2, 'dictData.tenancy.apn', 'APN', 'tenancy_type', NULL, NULL, '0', 'supervisor', 1699350000000, NULL, 0, NULL); diff --git a/database/upgrade/upg_sys_dict_data1_i18n_zh.sql b/database/upgrade/upg_sys_dict_data1_i18n_zh.sql index 3dffa5c1..e1389061 100644 --- a/database/upgrade/upg_sys_dict_data1_i18n_zh.sql +++ b/database/upgrade/upg_sys_dict_data1_i18n_zh.sql @@ -73,7 +73,7 @@ REPLACE INTO `sys_dict_data` VALUES (1052, 1052, 'menu.common.edit', '修改', ' REPLACE INTO `sys_dict_data` VALUES (1053, 1053, 'menu.common.delete', '删除', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (1054, 1054, 'menu.common.export', '导出', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (1055, 1055, 'menu.common.import', '导入', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -REPLACE INTO `sys_dict_data` VALUES (1056, 1056, 'menu.common.reset', '重置', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1056, 1056, 'menu.common.resetPwd', '重置密码', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (1057, 1057, 'menu.common.unlock', '账户解锁', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (1058, 1058, 'menu.forcedQuit.batch ', '批量强退', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (1059, 1059, 'menu.forcedQuit.single', '单条强退', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); @@ -262,7 +262,7 @@ REPLACE INTO `sys_dict_data` VALUES (1521, 1521, 'dictType.sys_oper_type_remark' REPLACE INTO `sys_dict_data` VALUES (1522, 1522, 'dictType.sys_common_status_remark', '登录状态列表', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (1523, 1523, 'dictType.trace_type_remark', '跟踪类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (1524, 1524, 'dictType.operation_log_type_remark', '操作日志类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -REPLACE INTO `sys_dict_data` VALUES (1525, 1525, 'dictType.alarm_status_remark', 'alarm_status', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1525, 1525, 'dictType.alarm_status_remark', '告警日志状态类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (1526, 1526, 'dictType.security_log_type_remark', '安全日志类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (1527, 1527, 'dictType.ne_version_status_remark', '网元软件版本状态', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (1528, 1528, 'dictType.i18n_en_remark', 'Internationalization - English', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); @@ -276,8 +276,8 @@ REPLACE INTO `sys_dict_data` VALUES (1535, 1535, 'dictType.sys_role_datascope_re REPLACE INTO `sys_dict_data` VALUES (1536, 1536, 'dictType.noData', '没有可访问字典类型数据!', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (1537, 1537, 'dictType.errNameExists', '操作字典【{name}】失败,字典名称已存在', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (1538, 1538, 'dictType.errTypeExists', '操作字典【{name}】失败,字典类型已存在', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -REPLACE INTO `sys_dict_data` VALUES (1600, 1600, 'dept.root', '系统维护部', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -REPLACE INTO `sys_dict_data` VALUES (1601, 1601, 'dept.root.item1', '运维一部', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1600, 1600, 'dept.root', '系统', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1601, 1601, 'dept.root.item1', '未分配', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (1602, 1602, 'dept.noData', '没有可访问部门数据!', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (1603, 1603, 'dept.errParentDelFlag', '上级部门【{name}】已删除,不允许新增', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (1604, 1604, 'dept.errParentStatus', '上级部门【{name}】停用,不允许新增', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); @@ -297,7 +297,7 @@ REPLACE INTO `sys_dict_data` VALUES (1638, 1638, 'config.sys.logo.filePathBrand' REPLACE INTO `sys_dict_data` VALUES (1639, 1639, 'config.sys.loginBackground', '系统设置-登录界面背景', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (1640, 1640, 'config.sys.title', '系统设置-系统名称', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (1641, 1641, 'config.sys.copyright', '系统设置-版权声明', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -REPLACE INTO `sys_dict_data` VALUES (1642, 1642, 'config.sys.user.initPasswordRemark', '导入用户初始化密码 123456', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1642, 1642, 'config.sys.user.initPasswordRemark', '导入用户初始化密码', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (1643, 1643, 'config.sys.account.captchaEnabledRemark', '是否开启验证码功能(true开启,false关闭)', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (1644, 1644, 'config.sys.account.registerUserRemark', '是否开启注册用户功能(true开启,false关闭)', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (1645, 1645, 'config.sys.user.maxRetryCountRemark', '密码最大错误次数', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); @@ -307,7 +307,7 @@ REPLACE INTO `sys_dict_data` VALUES (1648, 1648, 'config.sys.logo.typeRemark', ' REPLACE INTO `sys_dict_data` VALUES (1649, 1649, 'config.sys.logo.filePathIconRemark', '文件支持网络地址图片和内部上传的文件路径', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (1650, 1650, 'config.sys.logo.filePathBrandRemark', '文件支持网络地址图片和内部上传的文件路径', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (1651, 1651, 'config.sys.loginBackgroundRemark', '文件支持网络地址图片和内部上传的文件路径,默认背景用#号', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -REPLACE INTO `sys_dict_data` VALUES (1652, 1652, 'config.sys.titleRemark', '系统名称长度限制11位字符串', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1652, 1652, 'config.sys.titleRemark', '系统名称长度限制20位字符串', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (1653, 1653, 'config.sys.copyrightRemark', '底脚固定条,左侧放置版权声明', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (1654, 1654, 'config..export.id', '参数编号', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (1655, 1655, 'config..export.name', '参数名称', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); @@ -315,7 +315,7 @@ REPLACE INTO `sys_dict_data` VALUES (1656, 1656, 'config..export.key', '参数 REPLACE INTO `sys_dict_data` VALUES (1657, 1657, 'config..export.value', '参数键值', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (1658, 1658, 'config..export.type', '系统内置', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (1659, 1659, 'config..export.remark', '参数说明', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (1660, 1660, 'config.sys.titleValue', 'AGrandEMS', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT IGNORE INTO `sys_dict_data` VALUES (1660, 1660, 'config.sys.titleValue', 'AGrand EMS', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT IGNORE INTO `sys_dict_data` VALUES (1661, 1661, 'config.sys.copyrightValue', 'Copyright ©2023 千通科技', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (1662, 1662, 'config.noData', '没有可访问参数配置数据!', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (1663, 1663, 'config.errKey', '无效 key', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); @@ -544,12 +544,12 @@ REPLACE INTO `sys_dict_data` VALUES (2026, 2026, 'menu.monitor.topologyArchitect REPLACE INTO `sys_dict_data` VALUES (2027, 2027, 'menu.alarm', '告警', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (2028, 2028, 'menu.topology', '拓扑', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (2029, 2029, 'config.sys.lockTime', '系统设置-锁屏超时时长', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -REPLACE INTO `sys_dict_data` VALUES (2030, 2030, 'config.sys.lockTimeRemark', '无操作时锁屏超时时长,单位(秒)', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2030, 2030, 'config.sys.lockTimeRemark', '无操作时锁屏超时时长,单位(秒)。0表示无锁屏超时', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (2031, 2031, 'sys.account.captchaType', '账号自助-验证码类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (2032, 2032, 'sys.account.captchaTypeRemark', '使用验证码类型(math数值计算,char字符验证)', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (2033, 2033, 'menu.dashboard', '仪表盘', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (2034, 2034, 'menu.dashboard.overview', '总览', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -REPLACE INTO `sys_dict_data` VALUES (2035, 2035, 'menu.dashboard.cdr', 'IMS 话单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2035, 2035, 'menu.dashboard.imsCDR', 'IMS 话单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (2036, 2036, 'dictType.cdr_sip_code', 'CDR SIP响应代码类别类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (2037, 2037, 'dictType.cdr_call_type', 'CDR 呼叫类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (2038, 2038, 'dictType.ue_auth_code', 'UE 事件认证代码类型', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); @@ -562,7 +562,7 @@ REPLACE INTO `sys_dict_data` VALUES (2044, 2044, 'dictData.cdr_call_type.audio', REPLACE INTO `sys_dict_data` VALUES (2045, 2045, 'dictData.cdr_call_type.video', '视频', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (2046, 2046, 'dictData.ue_auth_code.200', '成功', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (2047, 2047, 'dictData.ue_auth_code.001', '网络失败', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -REPLACE INTO `sys_dict_data` VALUES (2048, 2048, 'dictData.ue_auth_code.002', '空口接口失败', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (2048, 2048, 'dictData.ue_auth_code.002', '接口失败', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (2049, 2049, 'dictData.ue_auth_code.003', 'MAC失败', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (2050, 2050, 'dictData.ue_auth_code.004', '同步失败', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (2051, 2051, 'dictData.ue_auth_code.005', '不接受非5G认证', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); @@ -623,8 +623,8 @@ REPLACE INTO `sys_dict_data` VALUES (2105, 2105, 'log.operate.title.neInfo', ' REPLACE INTO `sys_dict_data` VALUES (2106, 2106, 'neInfo.noData', '没有可访问网元信息数据!', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (2107, 2107, 'neInfo.errKeyExists', '网元信息操作【{key}】失败,同类型下标识已存在', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (2108, 2108, 'log.operate.title.imsCDR', 'IMS-CDR会话', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -REPLACE INTO `sys_dict_data` VALUES (2109, 2109, 'menu.dashboard.amfUE', '用户事件', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -REPLACE INTO `sys_dict_data` VALUES (2110, 2110, 'log.operate.title.amfUE', 'AMF-UE事件', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2109, 2109, 'menu.dashboard.amfUE', '5G UE事件', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2110, 2110, 'log.operate.title.amfUE', '5G UE事件', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (2111, 2111, 'dictData.ne_info_status.0', '离线', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (2112, 2112, 'dictData.ne_info_status.1', '在线', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (2113, 2113, 'dictData.ne_info_status.2', '等待同步', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); @@ -653,6 +653,20 @@ REPLACE INTO `sys_dict_data` VALUES (2135, 2135, 'dictData.ne_version_status.1', REPLACE INTO `sys_dict_data` VALUES (2136, 2136, 'dictData.ne_version_status.2', '上一版本', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (2137, 2137, 'dictData.ne_version_status.3', '有新版本', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (2138, 2138, 'menu.fault.event', '事件通知', 'i18n_zh', '', '', '1', 'supervisor', 1717051745866, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2139, 2139, 'menu.dashboard.smfCDR', 'SMF 话单', 'i18n_zh', '', '', '1', 'supervisor', 1717051745866, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2140, 2140, 'log.operate.title.smfCDR', 'SMF-CDR会话', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2141, 2141, 'config.sys.i18nDefaultRemark', '国际化默认语言可选择 en_US、zh_CN', 'i18n_zh', '', '', '1', 'supervisor', 1717051745866, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2142, 2142, 'config.sys.i18nOpenRemark', '是否显示切换的控件 true/false', 'i18n_zh', '', '', '1', 'supervisor', 1717051745866, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2143, 2143, 'menu.dashboard.mmeUE', '4G UE事件', 'i18n_zh', '', '', '1', 'supervisor', 1718441035866, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2144, 2144, 'log.operate.title.mmeUE', '4G UE事件', 'i18n_zh', '', '', '1', 'supervisor', 1718441035866, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2145, 2145, 'menu.system.user.editPost', '修改用户岗位', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2146, 2146, 'dictType.udm_sub_cn_type', 'UDM Sub CN Type', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2147, 2147, 'dictData.udm_sub_cn_type.0', '没有5GC和EPC', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2148, 2148, 'dictData.udm_sub_cn_type.1', '5GC', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2149, 2149, 'dictData.udm_sub_cn_type.2', 'EPC', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2150, 2150, 'dictData.udm_sub_cn_type.3', '5GC和EPC', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); + +-- 多租户 REPLACE INTO `sys_dict_data` VALUES (2139, 2139, 'menu.security.tenant', '租户管理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (2140, 2140, 'menu.security.tenantRemark', '租户管理菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (2141, 2141, 'menu.common.batchadd', '批量增加', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); @@ -679,4 +693,5 @@ REPLACE INTO `sys_dict_data` VALUES (2161, 2161, 'menu.tenant.amfUE', '5G终端 REPLACE INTO `sys_dict_data` VALUES (2162, 2162, 'menu.tenant.mmeUE', '4G终端事件', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (2163, 2163, 'menu.tenant.log', '操作日志', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); + SET FOREIGN_KEY_CHECKS = 1; diff --git a/database/upgrade/upg_sys_dict_data2_i18n_en.sql b/database/upgrade/upg_sys_dict_data2_i18n_en.sql index 0fc50e64..b7313241 100644 --- a/database/upgrade/upg_sys_dict_data2_i18n_en.sql +++ b/database/upgrade/upg_sys_dict_data2_i18n_en.sql @@ -73,7 +73,7 @@ REPLACE INTO `sys_dict_data` VALUES (3052, 3052, 'menu.common.edit', 'Modify', ' REPLACE INTO `sys_dict_data` VALUES (3053, 3053, 'menu.common.delete', 'Delete', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3054, 3054, 'menu.common.export', 'Export', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3055, 3055, 'menu.common.import', 'Import', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -REPLACE INTO `sys_dict_data` VALUES (3056, 3056, 'menu.common.reset', 'Reset', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3056, 3056, 'menu.common.resetPwd', 'Reset Password', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3057, 3057, 'menu.common.unlock', 'Account Unlock', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3058, 3058, 'menu.forcedQuit.batch ', 'Batch Undo', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3059, 3059, 'menu.forcedQuit.single', 'Individual Forced Retirement', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); @@ -256,7 +256,7 @@ REPLACE INTO `sys_dict_data` VALUES (3521, 3521, 'dictType.sys_oper_type_remark' REPLACE INTO `sys_dict_data` VALUES (3522, 3522, 'dictType.sys_common_status_remark', 'Login Status List', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3523, 3523, 'dictType.trace_type_remark', 'Trace Types', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3524, 3524, 'dictType.operation_log_type_remark', 'Operation log type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -REPLACE INTO `sys_dict_data` VALUES (3525, 3525, 'dictType.alarm_status_remark', 'alarm_status', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3525, 3525, 'dictType.alarm_status_remark', 'Alarm Log Status Type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3526, 3526, 'dictType.security_log_type_remark', 'Security Log Type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3527, 3527, 'dictType.ne_version_status_remark', 'Network element software version status', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3528, 3528, 'dictType.i18n_en_remark', 'Internationalization - English', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); @@ -270,8 +270,8 @@ REPLACE INTO `sys_dict_data` VALUES (3535, 3535, 'dictType.sys_role_datascope_re REPLACE INTO `sys_dict_data` VALUES (3536, 3536, 'dictType.noData', 'There is no accessible dictionary type data!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3537, 3537, 'dictType.errNameExists', 'Failed to manipulate dictionary [{name}], dictionary name already exists!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3538, 3538, 'dictType.errTypeExists', 'Failed to manipulate dictionary [{name}], dictionary type already exists!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -REPLACE INTO `sys_dict_data` VALUES (3600, 3600, 'dept.root', 'System Maintenance Department', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -REPLACE INTO `sys_dict_data` VALUES (3601, 3601, 'dept.root.item1', 'Operation and Maintenance Department One', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3600, 3600, 'dept.root', 'System', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3601, 3601, 'dept.root.item1', 'Unallocated', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3602, 3602, 'dept.noData', 'There is no accessible department data!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3603, 3603, 'dept.errParentDelFlag', 'The parent department [{name}] has been deleted and is not allowed to be added.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3604, 3604, 'dept.errParentStatus', 'Parent department [{name}] is deactivated, additions are not allowed!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); @@ -291,7 +291,7 @@ REPLACE INTO `sys_dict_data` VALUES (3638, 3638, 'config.sys.logo.filePathBrand' REPLACE INTO `sys_dict_data` VALUES (3639, 3639, 'config.sys.loginBackground', 'System Settings-Login Interface Background', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3640, 3640, 'config.sys.title', 'System Settings-System Name', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3641, 3641, 'config.sys.copyright', 'System Settings-Copyright Notice', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -REPLACE INTO `sys_dict_data` VALUES (3642, 3642, 'config.sys.user.initPasswordRemark', 'Import user initialization password 123456', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3642, 3642, 'config.sys.user.initPasswordRemark', 'Import user initialization password', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3643, 3643, 'config.sys.account.captchaEnabledRemark', 'Whether to enable the verification code function (true on, false off)', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3644, 3644, 'config.sys.account.registerUserRemark', 'Whether to enable the function of registered users (true on, false off)', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3645, 3645, 'config.sys.user.maxRetryCountRemark', 'Maximum number of password errors', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); @@ -301,7 +301,7 @@ REPLACE INTO `sys_dict_data` VALUES (3648, 3648, 'config.sys.logo.typeRemark', ' REPLACE INTO `sys_dict_data` VALUES (3649, 3649, 'config.sys.logo.filePathIconRemark', 'File support for web address images and file paths for internal uploads', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3650, 3650, 'config.sys.logo.filePathBrandRemark', 'File support for web address images and paths to internally uploaded files', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3651, 3651, 'config.sys.loginBackgroundRemark', 'The file supports web address images and internal upload file paths with a # in the default background', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -REPLACE INTO `sys_dict_data` VALUES (3652, 3652, 'config.sys.titleRemark', 'System name length limit of 11-digit string', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3652, 3652, 'config.sys.titleRemark', 'System name length limit of 20-digit string', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3653, 3653, 'config.sys.copyrightRemark', 'Footer fixing strip with copyright notice on the left side', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3654, 3654, 'config..export.id', 'ID', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3655, 3655, 'config..export.name', 'Config Name', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); @@ -309,7 +309,7 @@ REPLACE INTO `sys_dict_data` VALUES (3656, 3656, 'config..export.key', 'Config K REPLACE INTO `sys_dict_data` VALUES (3657, 3657, 'config..export.value', 'Config Value', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3658, 3658, 'config..export.type', 'Built In', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3659, 3659, 'config..export.remark', 'Config Description', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_dict_data` VALUES (3660, 3660, 'config.sys.titleValue', 'AGrandEMS', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT IGNORE INTO `sys_dict_data` VALUES (3660, 3660, 'config.sys.titleValue', 'AGrand EMS', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT IGNORE INTO `sys_dict_data` VALUES (3661, 3661, 'config.sys.copyrightValue', 'Copyright ©2023 AGrandTech', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3662, 3662, 'config.noData', 'No parameter configuration data is accessible!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3663, 3663, 'config.errKey', 'Invalid key', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); @@ -513,7 +513,7 @@ REPLACE INTO `sys_dict_data` VALUES (4000, 4000, 'log.operate.title.neAction', ' REPLACE INTO `sys_dict_data` VALUES (4001, 4001, 'log.operate.title.helpDoc', 'System Usage Documentation', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (4002, 4002, 'menu.ueUser.n3iwf', 'N3IWF Online User', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (4003, 4003, 'menu.ueUser.pcf', 'User PCC Information', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -REPLACE INTO `sys_dict_data` VALUES (4004, 4004, 'menu.system.user.editRole', 'Modifying user roles', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4004, 4004, 'menu.system.user.editRole', 'Modifying User Role', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (4005, 4005, 'config.sys.i18nOpen', 'Internationalization Switching', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (4006, 4006, 'config.sys.i18nDefault', 'Internationalization Default Language', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (4007, 4007, 'user.export.role', 'Role', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); @@ -539,12 +539,12 @@ REPLACE INTO `sys_dict_data` VALUES (4026, 4026, 'menu.monitor.topologyArchitect REPLACE INTO `sys_dict_data` VALUES (4027, 4027, 'menu.alarm', 'Alarm', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (4028, 4028, 'menu.topology', 'Topology', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (4029, 4029, 'config.sys.lockTime', 'System Settings - Screen Lock Timeout Duration', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -REPLACE INTO `sys_dict_data` VALUES (4030, 4030, 'config.sys.lockTimeRemark', 'Screen lock timeout duration when idle, in seconds.', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4030, 4030, 'config.sys.lockTimeRemark', 'Timeout of lock screen when no operation, unit (sec), 0 means no timeout of lock screen', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (4031, 4031, 'sys.account.captchaType', 'Account Self Service - Captcha Type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (4032, 4032, 'sys.account.captchaTypeRemark', 'Using CAPTCHA types (math numeric calculation, char character validation)', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (4033, 4033, 'menu.dashboard', 'Dashboard', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (4034, 4034, 'menu.dashboard.overview', 'Overview', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -REPLACE INTO `sys_dict_data` VALUES (4035, 4035, 'menu.dashboard.cdr', 'IMS CDR', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4035, 4035, 'menu.dashboard.imsCDR', 'IMS CDR', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (4036, 4036, 'dictType.cdr_sip_code', 'CDR SIP Response Code Category Type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (4037, 4037, 'dictType.cdr_call_type', 'CDR Call Type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (4038, 4038, 'dictType.ue_auth_code', 'UE Event Authentication Code Type', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); @@ -557,7 +557,7 @@ REPLACE INTO `sys_dict_data` VALUES (4044, 4044, 'dictData.cdr_call_type.audio', REPLACE INTO `sys_dict_data` VALUES (4045, 4045, 'dictData.cdr_call_type.video', 'Video', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (4046, 4046, 'dictData.ue_auth_code.200', 'Success', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (4047, 4047, 'dictData.ue_auth_code.001', 'Network Failure', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); -REPLACE INTO `sys_dict_data` VALUES (4048, 4048, 'dictData.ue_auth_code.002', 'Air Interface Failure', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (4048, 4048, 'dictData.ue_auth_code.002', 'Interface Failure', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (4049, 4049, 'dictData.ue_auth_code.003', 'MAC Failure', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (4050, 4050, 'dictData.ue_auth_code.004', 'Synchronization failure', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (4051, 4051, 'dictData.ue_auth_code.005', 'Non-5G Authentication Not Accepted', 'i18n_en', NULL, NULL, '1', 'supervisor', 1705550000000, NULL, 0, NULL); @@ -618,8 +618,8 @@ REPLACE INTO `sys_dict_data` VALUES (4105, 4105, 'log.operate.title.neInfo', 'NE REPLACE INTO `sys_dict_data` VALUES (4106, 4106, 'neInfo.noData', 'There is no accessible network element information data!', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (4107, 4107, 'neInfo.errKeyExists', 'NE info operation [{key}] failed, identifier already exists under the same type', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (4108, 4108, 'log.operate.title.imsCDR', 'IMS-CDR session', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -REPLACE INTO `sys_dict_data` VALUES (4109, 4109, 'menu.dashboard.amfUE', 'UE Event', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -REPLACE INTO `sys_dict_data` VALUES (4110, 4110, 'log.operate.title.amfUE', 'AMF-UE event', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4109, 4109, 'menu.dashboard.amfUE', '5G UE Events', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4110, 4110, 'log.operate.title.amfUE', '5G UE Events', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (4111, 4111, 'dictData.ne_info_status.0', 'Offline', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (4112, 4112, 'dictData.ne_info_status.1', 'Online', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (4113, 4113, 'dictData.ne_info_status.2', 'Wait Sync', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); @@ -638,7 +638,7 @@ REPLACE INTO `sys_dict_data` VALUES (4125, 4125, 'dictData.ne_license_status.0', REPLACE INTO `sys_dict_data` VALUES (4126, 4126, 'dictData.ne_license_status.1', 'Valid', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (4127, 4127, 'menu.dashboard.mocn', 'MOCN', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (4128, 4128, 'menu.monitor.cdr', 'CDR', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); -REPLACE INTO `sys_dict_data` VALUES (4129, 4129, 'menu.monitor.event', 'Event', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4129, 4129, 'menu.monitor.event', 'Events', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (4130, 4130, 'post.export.time', 'Creation Time', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (4131, 4131, 'role.export.time', 'Creation Time', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (4132, 4132, 'dictData.ne_host_authMode.2', 'Confidentiality Auth Mode', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); @@ -648,6 +648,20 @@ REPLACE INTO `sys_dict_data` VALUES (4135, 4135, 'dictData.ne_version_status.1', REPLACE INTO `sys_dict_data` VALUES (4136, 4136, 'dictData.ne_version_status.2', 'Previous', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (4137, 4137, 'dictData.ne_version_status.3', 'Has New', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (4138, 4138, 'menu.fault.event', 'Event Notification', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4139, 4139, 'menu.dashboard.smfCDR', 'SMF CDR', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4140, 4140, 'log.operate.title.smfCDR', 'SMF-CDR session', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4141, 4141, 'config.sys.i18nDefaultRemark', 'Internationalization default language selectable en_US、zh_CN', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4142, 4142, 'config.sys.i18nOpenRemark', 'Whether to display switched controls true/false', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4143, 4143, 'menu.dashboard.mmeUE', '4G UE Events', 'i18n_en', '', '', '1', 'supervisor', 1718441035866, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4144, 4144, 'log.operate.title.mmeUE', '4G UE Events', 'i18n_en', '', '', '1', 'supervisor', 1718441035866, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4145, 4145, 'menu.system.user.editPost', 'Modify User Post', 'i18n_en', '', '', '1', 'supervisor', 1718441035866, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4146, 4146, 'dictType.udm_sub_cn_type', 'UDM Sub CN Type', 'i18n_en', '', '', '1', 'supervisor', 1718441035866, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4147, 4147, 'dictData.udm_sub_cn_type.0', 'No 5GC and EPC', 'i18n_en', '', '', '1', 'supervisor', 1718441035866, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4148, 4148, 'dictData.udm_sub_cn_type.1', '5GC', 'i18n_en', '', '', '1', 'supervisor', 1718441035866, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4149, 4149, 'dictData.udm_sub_cn_type.2', 'EPC', 'i18n_en', '', '', '1', 'supervisor', 1718441035866, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4150, 4150, 'dictData.udm_sub_cn_type.3', '5GC and EPC', 'i18n_en', '', '', '1', 'supervisor', 1718441035866, '', 0, ''); + +-- 多租户 REPLACE INTO `sys_dict_data` VALUES (4139, 4139, 'menu.security.tenant', 'Tenant Management', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (4140, 4140, 'menu.security.tenantRemark', 'Tenant Management Menu', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (4141, 4141, 'menu.common.batchadd', 'Batch Add', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); @@ -675,4 +689,5 @@ REPLACE INTO `sys_dict_data` VALUES (4162, 4162, 'menu.tenant.mmeUE', '4G UE Eve REPLACE INTO `sys_dict_data` VALUES (4163, 4163, 'menu.tenant.log', 'Operation Logs', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); + SET FOREIGN_KEY_CHECKS = 1; diff --git a/database/upgrade/upg_sys_dict_type.sql b/database/upgrade/upg_sys_dict_type.sql index a043b13e..569c6e40 100644 --- a/database/upgrade/upg_sys_dict_type.sql +++ b/database/upgrade/upg_sys_dict_type.sql @@ -1,19 +1,3 @@ -/* - Navicat Premium Data Transfer - - Source Server : root@192.168.2.166 - Source Server Type : MariaDB - Source Server Version : 100616 (10.6.16-MariaDB-0ubuntu0.22.04.1) - Source Host : 192.168.2.166:33066 - Source Schema : omc_db - - Target Server Type : MariaDB - Target Server Version : 100616 (10.6.16-MariaDB-0ubuntu0.22.04.1) - File Encoding : 65001 - - Date: 29/01/2024 20:32:50 -*/ - SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; @@ -69,6 +53,9 @@ INSERT IGNORE INTO `sys_dict_type` VALUES (120, 'dictType.ne_host_authMode', 'ne INSERT IGNORE INTO `sys_dict_type` VALUES (121, 'dictType.ne_host_cmd_groupId', 'ne_host_cmd_groupId', '1', 'supervisor', 1702020000000, '', 0, ''); INSERT IGNORE INTO `sys_dict_type` VALUES (122, 'dictType.ne_info_status', 'ne_info_status', '1', 'supervisor', 1702020000000, '', 0, ''); INSERT IGNORE INTO `sys_dict_type` VALUES (123, 'dictType.ne_license_status', 'ne_license_status', '1', 'supervisor', 1702020000000, '', 0, ''); -INSERT IGNORE INTO `sys_dict_type` VALUES (124, 'dictType.tenancy_type', 'tenancy_type', '1', 'supervisor', 1702020000000, '', 0, ''); +INSERT IGNORE INTO `sys_dict_type` VALUES (124, 'dictType.udm_sub_cn_type', 'udm_sub_cn_type', '1', 'supervisor', 1702020000000, '', 0, ''); + +-- 多租户 +INSERT IGNORE INTO `sys_dict_type` VALUES (1000, 'dictType.tenancy_type', 'tenancy_type', '1', 'supervisor', 1702020000000, '', 0, ''); SET FOREIGN_KEY_CHECKS = 1; diff --git a/database/upgrade/upg_sys_job.sql b/database/upgrade/upg_sys_job.sql index 16c0b267..9b24f9e0 100644 --- a/database/upgrade/upg_sys_job.sql +++ b/database/upgrade/upg_sys_job.sql @@ -1,344 +1,30 @@ -/* - 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 : omc_db - - Target Server Type : MariaDB - Target Server Version : 100338 (10.3.38-MariaDB) - File Encoding : 65001 - - Date: 25/10/2023 18:24:04 - */ SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; + -- ---------------------------- -- Table structure for sys_job -- ---------------------------- CREATE TABLE IF NOT EXISTS `sys_job` ( - `job_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '任务ID', + `job_id` bigint NOT NULL AUTO_INCREMENT COMMENT '任务ID', `job_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '任务名称', `job_group` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT 'DEFAULT' COMMENT '任务组名', `invoke_target` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '调用目标字符串', - `target_params` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '调用目标传入参数', - `cron_expression` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT 'cron执行表达式', - `misfire_policy` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '3' COMMENT '计划执行错误策略(1立即执行 2执行一次 3放弃执行)', - `concurrent` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '是否并发执行(0禁止 1允许)', - `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '任务状态(0暂停 1正常)', - `save_log` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '是否记录任务日志(0不记录 1记录)', - `create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者', - `create_time` bigint(20) NULL DEFAULT 0 COMMENT '创建时间', - `update_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者', - `update_time` bigint(20) NULL DEFAULT 0 COMMENT '更新时间', - `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注', - PRIMARY KEY (`job_id`, `job_name`, `job_group`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 8 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '调度任务调度表' ROW_FORMAT = Dynamic; - -ALTER TABLE - `sys_job` DROP PRIMARY KEY, -ADD - PRIMARY KEY (`job_id`) USING BTREE, -ADD - UNIQUE INDEX IF NOT EXISTS `idx_uni_name_group`(`job_name`, `job_group`) USING BTREE COMMENT 'unique index for job_name and job_group'; + `target_params` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '调用目标传入参数', + `cron_expression` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT 'cron执行表达式', + `misfire_policy` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '3' COMMENT '计划执行错误策略(1立即执行 2执行一次 3放弃执行)', + `concurrent` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '是否并发执行(0禁止 1允许)', + `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '任务状态(0暂停 1正常)', + `save_log` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '是否记录任务日志(0不记录 1记录)', + `create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '创建者', + `create_time` bigint DEFAULT '0' COMMENT '创建时间', + `update_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '更新者', + `update_time` bigint DEFAULT '0' COMMENT '更新时间', + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '备注', + PRIMARY KEY (`job_id`) USING BTREE, + UNIQUE KEY `idx_uni_name_group` (`job_name`,`job_group`) USING BTREE COMMENT 'unique index for job_name and job_group' +) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='调度任务调度表'; -- ---------------------------- -- Records of sys_job -- ---------------------------- -INSERT IGNORE INTO - `sys_job` ( - `job_id`, - `job_name`, - `job_group`, - `invoke_target`, - `target_params`, - `cron_expression`, - `misfire_policy`, - `concurrent`, - `status`, - `save_log`, - `create_by`, - `create_time`, - `update_by`, - `update_time`, - `remark` - ) -VALUES ( - 1, - 'job.monitor_sys_resource', - 'SYSTEM', - 'monitor_sys_resource', - '{\"interval\":5}', - '0 0/5 * * * ?', - '3', - '0', - '1', - '0', - 'supervisor', - 1698478134839, - 'supervisor', - 1700571615807, - 'job.monitor_sys_resource_remark' - ); - -INSERT IGNORE INTO - `sys_job` ( - `job_id`, - `job_name`, - `job_group`, - `invoke_target`, - `target_params`, - `cron_expression`, - `misfire_policy`, - `concurrent`, - `status`, - `save_log`, - `create_by`, - `create_time`, - `update_by`, - `update_time`, - `remark` - ) -VALUES ( - 4, - 'job.delExpiredNeBackup', - 'SYSTEM', - 'delExpiredNeBackup', - '{\"duration\":60}', - '0 20 0 * * ?', - '3', - '0', - '1', - '1', - 'supervisor', - 1698478134840, - NULL, - 0, - 'job.delExpiredNeBackupRemark' - ); - -INSERT IGNORE INTO - `sys_job` ( - `job_id`, - `job_name`, - `job_group`, - `invoke_target`, - `target_params`, - `cron_expression`, - `misfire_policy`, - `concurrent`, - `status`, - `save_log`, - `create_by`, - `create_time`, - `update_by`, - `update_time`, - `remark` - ) -VALUES ( - 5, - 'job.deleteExpiredAlarmRecord', - 'SYSTEM', - 'deleteExpiredRecord', - '{\"duration\":90,\"tableName\":\"alarm\",\"colName\":\"event_time\",\"extras\":\"alarm_status=\'0\'\"}', - '0 10 0 * * ?', - '3', - '0', - '1', - '1', - 'supervisor', - 1698478134841, - NULL, - 0, - 'job.deleteExpiredAlarmRecordRemark' - ); - -INSERT IGNORE INTO - `sys_job` ( - `job_id`, - `job_name`, - `job_group`, - `invoke_target`, - `target_params`, - `cron_expression`, - `misfire_policy`, - `concurrent`, - `status`, - `save_log`, - `create_by`, - `create_time`, - `update_by`, - `update_time`, - `remark` - ) -VALUES ( - 6, - 'job.deleteExpiredKpiRecord', - 'SYSTEM', - 'deleteExpiredRecord', - '{\"duration\":30,\"tableName\":\"gold_kpi\",\"colName\":\"date\"}', - '0 15 0 * * ?', - '3', - '0', - '1', - '1', - 'supervisor', - 1698478134842, - 'supervisor', - 1700570673113, - 'job.deleteExpiredKpiRecordRemark' - ); - -INSERT IGNORE INTO - `sys_job` ( - `job_id`, - `job_name`, - `job_group`, - `invoke_target`, - `target_params`, - `cron_expression`, - `misfire_policy`, - `concurrent`, - `status`, - `save_log`, - `create_by`, - `create_time`, - `update_by`, - `update_time`, - `remark` - ) -VALUES ( - 7, - 'job.backupEtcFromNE', - 'SYSTEM', - 'backupEtcFromNE', - NULL, - '0 30 0 * * ?', - '3', - '0', - '1', - '1', - 'supervisor', - 1698478134843, - NULL, - 0, - 'job.backupEtcFromNERemark' - ); - -INSERT IGNORE INTO - `sys_job` ( - `job_id`, - `job_name`, - `job_group`, - `invoke_target`, - `target_params`, - `cron_expression`, - `misfire_policy`, - `concurrent`, - `status`, - `save_log`, - `create_by`, - `create_time`, - `update_by`, - `update_time`, - `remark` - ) -VALUES ( - 8, - 'job.deleteExpiredNeStateRecord', - 'SYSTEM', - 'deleteExpiredRecord', - '{\"duration\":7,\"tableName\":\"ne_state\",\"colName\":\"timestamp\"}', - '0 25 0 * * ?', - '3', - '0', - '1', - '1', - 'supervisor', - 1698478134842, - 'admin', - 1703668901929, - 'job.deleteExpiredNeStateRecordRemark' - ); - -INSERT IGNORE INTO - `sys_job` ( - `job_id`, - `job_name`, - `job_group`, - `invoke_target`, - `target_params`, - `cron_expression`, - `misfire_policy`, - `concurrent`, - `status`, - `save_log`, - `create_by`, - `create_time`, - `update_by`, - `update_time`, - `remark` - ) -VALUES ( - 9, - 'job.getStateFromNE', - 'SYSTEM', - 'getStateFromNE', - '', - '0/10 * * * * ?', - '3', - '0', - '1', - '0', - 'supervisor', - 1698478134842, - 'admin', - 1703669877919, - 'job.getStateFromNERemark' - ); - -INSERT IGNORE INTO - `sys_job` ( - `job_id`, - `job_name`, - `job_group`, - `invoke_target`, - `target_params`, - `cron_expression`, - `misfire_policy`, - `concurrent`, - `status`, - `save_log`, - `create_by`, - `create_time`, - `update_by`, - `update_time`, - `remark` - ) -VALUES ( - 10, - 'job.genNeStateAlarm', - 'SYSTEM', - 'genNeStateAlarm', - '{\"alarmID\":\"HXEMSSM10000\",\"alarmCode\":10000,\"alarmTitle\":\"The system state is abnormal\",\"neType\":\"OMC\",\"alarmType\":\"EquipmentAlarm\",\"origSeverity\": \"Major\",\"objectName\":\"EMS;SystemManagement;Heartbeat\",\"objectType\":\"SystemState\",\"specificProblem\":\"Alarm cause: the system state of target NE has not been received for {threshold} seconds\", \"specificProblemID\":\"AC10000\",\"threshold\":30}', - '0/5 * * * * ?', - '3', - '0', - '1', - '0', - 'supervisor', - 1698478134842, - 'admin', - 1703768623188, - 'job.genNeStateAlarmRemark' - ); - -UPDATE `sys_job` -SET - `target_params` = '{\"duration\":1,\"tableName\":\"ne_state\",\"colName\":\"timestamp\"}' -WHERE - `job_id` = 8; - SET FOREIGN_KEY_CHECKS = 1; \ No newline at end of file diff --git a/database/upgrade/upg_sys_menu.sql b/database/upgrade/upg_sys_menu.sql index da35af7f..1964338b 100644 --- a/database/upgrade/upg_sys_menu.sql +++ b/database/upgrade/upg_sys_menu.sql @@ -1,26 +1,9 @@ -/* - 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 : omc_db - - Target Server Type : MariaDB - Target Server Version : 100338 (10.3.38-MariaDB) - File Encoding : 65001 - - Date: 20/01/2024 15:03:44 -*/ - SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for sys_menu -- ---------------------------- -DROP TABLE IF EXISTS `sys_menu`; CREATE TABLE IF NOT EXISTS `sys_menu` ( `menu_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '菜单ID', `menu_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '菜单名称', @@ -52,28 +35,28 @@ INSERT IGNORE INTO `sys_menu` VALUES (5, 'menu.ueUser', 0, 7, 'neUser', NULL, '1 INSERT IGNORE INTO `sys_menu` VALUES (100, 'menu.security.user', 2113, 1, 'user', 'system/user/index', '1', '1', 'M', '1', '1', 'system:user:list', 'icon-wocanyu', 'supervisor', 1700000000000, NULL, 0, 'menu.security.userRemark'); INSERT IGNORE INTO `sys_menu` VALUES (101, 'menu.security.role', 2113, 3, 'role', 'system/role/index', '1', '1', 'M', '1', '1', 'system:role:list', 'icon-anzhuo', 'supervisor', 1700000000000, NULL, 0, 'menu.security.roleRemark'); INSERT IGNORE INTO `sys_menu` VALUES (102, 'menu.security.roleUser', 2113, 3, 'role/inline/auth-user/:roleId', 'system/role/auth-user', '1', '1', 'M', '0', '1', 'system:role:auth', '#', 'supervisor', 1700000000000, NULL, 0, 'menu.security.roleUserRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (103, 'menu.system.menu', 1, 4, 'menu', 'system/menu/index', '1', '1', 'M', '1', '1', 'system:menu:list', 'icon-wofaqi', 'supervisor', 1700000000000, NULL, 0, 'menu.system.menuRemark'); +INSERT IGNORE INTO `sys_menu` VALUES (103, 'menu.system.menu', 1, 10, 'menu', 'system/menu/index', '1', '1', 'M', '1', '1', 'system:menu:list', 'icon-wofaqi', 'supervisor', 1700000000000, NULL, 0, 'menu.system.menuRemark'); INSERT IGNORE INTO `sys_menu` VALUES (104, 'menu.security.dept', 2113, 5, 'dept', 'system/dept/index', '1', '1', 'M', '1', '1', 'system:dept:list', 'icon-yuzhanghao1', 'supervisor', 1700000000000, NULL, 0, 'menu.security.deptRemark'); INSERT IGNORE INTO `sys_menu` VALUES (105, 'menu.security.post', 2113, 6, 'post', 'system/post/index', '1', '1', 'M', '1', '1', 'system:post:list', 'icon-gonggaodayi', 'supervisor', 1700000000000, NULL, 0, 'menu.security.postRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (106, 'menu.system.dictType', 1, 7, 'dict', 'system/dict/index', '1', '1', 'M', '1', '1', 'system:dict:list', 'icon-tubiaoku', 'supervisor', 1700000000000, NULL, 0, 'menu.system.dictTypeRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (107, 'menu.system.dictData', 1, 8, 'dict/inline/data/:dictId', 'system/dict/data', '1', '1', 'M', '0', '1', 'system:dict:data', '#', 'supervisor', 1700000000000, NULL, 0, 'menu.system.dictDataRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (108, 'menu.system.paramSet', 1, 9, 'config', 'system/config/index', '1', '1', 'M', '1', '1', 'system:config:list', 'icon-gongnengjieshao', 'supervisor', 1700000000000, NULL, 0, 'menu.system.paramSetRemark'); +INSERT IGNORE INTO `sys_menu` VALUES (106, 'menu.system.dictType', 1, 30, 'dict', 'system/dict/index', '1', '1', 'M', '1', '1', 'system:dict:list', 'icon-tubiaoku', 'supervisor', 1700000000000, NULL, 0, 'menu.system.dictTypeRemark'); +INSERT IGNORE INTO `sys_menu` VALUES (107, 'menu.system.dictData', 1, 31, 'dict/inline/data/:dictId', 'system/dict/data', '1', '1', 'M', '0', '1', 'system:dict:data', '#', 'supervisor', 1700000000000, NULL, 0, 'menu.system.dictDataRemark'); +INSERT IGNORE INTO `sys_menu` VALUES (108, 'menu.system.paramSet', 1, 59, 'config', 'system/config/index', '1', '1', 'M', '1', '1', 'system:config:list', 'icon-gongnengjieshao', 'supervisor', 1700000000000, NULL, 0, 'menu.system.paramSetRemark'); INSERT IGNORE INTO `sys_menu` VALUES (111, 'menu.system.systemLog', 1, 11, 'log', NULL, '1', '1', 'D', '0', '0', NULL, '#', 'supervisor', 1700000000000, NULL, 0, 'menu.system.systemLogRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (112, 'menu.system.systemInfo', 1, 3, 'system-info', 'monitor/system/info', '1', '1', 'M', '1', '1', 'monitor:system:info', 'icon-fuzhidaima', 'supervisor', 1700000000000, NULL, 0, 'menu.system.systemInfoRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (113, 'menu.system.cacheInfo', 1, 2, 'cache-info', 'monitor/cache/info', '1', '1', 'M', '1', '1', 'monitor:cache:info', 'icon-gongnengjieshao', 'supervisor', 1700000000000, NULL, 0, 'menu.system.cacheInfoRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (114, 'menu.system.cache', 1, 3, 'cache', 'monitor/cache/index', '1', '1', 'M', '1', '1', 'monitor:cache:list', 'icon-tubiaoku', 'supervisor', 1700000000000, NULL, 0, 'menu.system.cacheRemark'); +INSERT IGNORE INTO `sys_menu` VALUES (112, 'menu.system.systemInfo', 1, 5, 'system-info', 'monitor/system/info', '1', '1', 'M', '1', '1', 'monitor:system:info', 'icon-fuzhidaima', 'supervisor', 1700000000000, NULL, 0, 'menu.system.systemInfoRemark'); +INSERT IGNORE INTO `sys_menu` VALUES (113, 'menu.system.cacheInfo', 1, 8, 'cache-info', 'monitor/cache/info', '1', '1', 'M', '1', '1', 'monitor:cache:info', 'icon-gongnengjieshao', 'supervisor', 1700000000000, NULL, 0, 'menu.system.cacheInfoRemark'); +INSERT IGNORE INTO `sys_menu` VALUES (114, 'menu.system.cache', 1, 9, 'cache', 'monitor/cache/index', '1', '1', 'M', '1', '1', 'monitor:cache:list', 'icon-tubiaoku', 'supervisor', 1700000000000, NULL, 0, 'menu.system.cacheRemark'); INSERT IGNORE INTO `sys_menu` VALUES (115, 'menu.security.onlineUser', 2113, 2, 'online', 'monitor/online/index', '1', '1', 'M', '1', '1', 'monitor:online:list', 'icon-xiangmuchengyuan', 'supervisor', 1700000000000, NULL, 0, 'menu.security.onlineUserRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (116, 'menu.system.job', 1, 1, 'job', 'monitor/job/index', '1', '1', 'M', '1', '1', 'monitor:job:list', 'icon-lishi', 'supervisor', 1700000000000, NULL, 0, 'menu.system.jobRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (117, 'menu.system.jobLog', 1, 2, '/system/job/inline/log/:jobId', 'monitor/job/log', '1', '1', 'M', '0', '1', 'monitor:job:log', '#', 'supervisor', 1700000000000, NULL, 0, 'menu.system.jobLogRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (500, 'menu.log.operat', 2089, 1, 'operate', 'system/log/operate/index', '1', '1', 'M', '1', '1', 'system:log:operate:list', 'icon-fuzhidaima', 'supervisor', 1700000000000, NULL, 0, 'menu.log.operatRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (501, 'menu.log.login', 2089, 2, 'login', 'system/log/login/index', '1', '1', 'M', '1', '1', 'system:log:login:list', 'icon-fuzhidaima', 'supervisor', 1700000000000, NULL, 0, 'menu.log.loginRemark'); +INSERT IGNORE INTO `sys_menu` VALUES (116, 'menu.system.job', 1, 20, 'job', 'monitor/job/index', '1', '1', 'M', '1', '1', 'monitor:job:list', 'icon-lishi', 'supervisor', 1700000000000, NULL, 0, 'menu.system.jobRemark'); +INSERT IGNORE INTO `sys_menu` VALUES (117, 'menu.system.jobLog', 1, 21, '/system/job/inline/log/:jobId', 'monitor/job/log', '1', '1', 'M', '0', '1', 'monitor:job:log', '#', 'supervisor', 1700000000000, NULL, 0, 'menu.system.jobLogRemark'); +INSERT IGNORE INTO `sys_menu` VALUES (500, 'menu.log.operat', 2089, 25, 'operate', 'system/log/operate/index', '1', '1', 'M', '1', '1', 'system:log:operate:list', 'icon-fuzhidaima', 'supervisor', 1700000000000, NULL, 0, 'menu.log.operatRemark'); +INSERT IGNORE INTO `sys_menu` VALUES (501, 'menu.log.login', 2089, 26, 'login', 'system/log/login/index', '1', '1', 'M', '1', '1', 'system:log:login:list', 'icon-fuzhidaima', 'supervisor', 1700000000000, NULL, 0, 'menu.log.loginRemark'); INSERT IGNORE INTO `sys_menu` VALUES (1000, 'menu.common.query', 100, 1, NULL, NULL, '1', '1', 'B', '1', '1', 'system:user:query', '#', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT IGNORE INTO `sys_menu` VALUES (1001, 'menu.common.add', 100, 2, NULL, NULL, '1', '1', 'B', '1', '1', 'system:user:add', '#', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT IGNORE INTO `sys_menu` VALUES (1002, 'menu.common.edit', 100, 3, NULL, NULL, '1', '1', 'B', '1', '1', 'system:user:edit', '#', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT IGNORE INTO `sys_menu` VALUES (1003, 'menu.common.delete', 100, 4, NULL, NULL, '1', '1', 'B', '1', '1', 'system:user:remove', '#', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT IGNORE INTO `sys_menu` VALUES (1004, 'menu.common.export', 100, 5, NULL, NULL, '1', '1', 'B', '1', '1', 'system:user:export', '#', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT IGNORE INTO `sys_menu` VALUES (1005, 'menu.common.import', 100, 6, NULL, NULL, '1', '1', 'B', '1', '1', 'system:user:import', '#', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (1006, 'menu.common.reset', 100, 7, NULL, NULL, '1', '1', 'B', '1', '1', 'system:user:resetPwd', '#', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT IGNORE INTO `sys_menu` VALUES (1006, 'menu.common.resetPwd', 100, 7, NULL, NULL, '1', '1', 'B', '1', '1', 'system:user:resetPwd', '#', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT IGNORE INTO `sys_menu` VALUES (1007, 'menu.common.query', 101, 1, NULL, NULL, '1', '1', 'B', '1', '1', 'system:role:query', '#', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT IGNORE INTO `sys_menu` VALUES (1008, 'menu.common.add', 101, 2, NULL, NULL, '1', '1', 'B', '1', '1', 'system:role:add', '#', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT IGNORE INTO `sys_menu` VALUES (1009, 'menu.common.edit', 101, 3, NULL, NULL, '1', '1', 'B', '1', '1', 'system:role:edit', '#', 'supervisor', 1700000000000, NULL, 0, NULL); @@ -122,9 +105,9 @@ INSERT IGNORE INTO `sys_menu` VALUES (1055, 'menu.common.edit', 116, 5, '#', NUL INSERT IGNORE INTO `sys_menu` VALUES (1056, 'menu.common.export', 116, 6, '#', NULL, '1', '1', 'B', '1', '1', 'monitor:job:export', '#', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT IGNORE INTO `sys_menu` VALUES (2009, 'menu.ueUser.authUDM', 5, 1, 'auth', 'neUser/auth/index', '1', '1', 'M', '1', '1', 'neUser:auth:index', 'icon-xiangmuchengyuan', 'supervisor', 1700000000000, NULL, 0, 'menu.ueUser.authUDMRemark'); INSERT IGNORE INTO `sys_menu` VALUES (2010, 'menu.ueUser.subUDM', 5, 2, 'sub', 'neUser/sub/index', '1', '1', 'M', '1', '1', 'neUser:sub:index', 'icon-xiangmuchengyuan', 'supervisor', 1700000000000, NULL, 0, 'menu.ueUser.subUDMRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (2075, 'menu.config.neManage', 4, 1, 'neManage', 'configManage/neManage/index', '1', '0', 'M', '1', '1', 'configManage:neManage:index', 'icon-biaoqing', 'supervisor', 1700000000000, NULL, 0, 'menu.config.neManageRemark'); +INSERT IGNORE INTO `sys_menu` VALUES (2075, 'menu.config.neManage', 4, 1, 'neManage', 'configManage/neManage/index', '1', '0', 'M', '1', '0', 'configManage:neManage:index', 'icon-biaoqing', 'supervisor', 1700000000000, NULL, 0, 'menu.config.neManageRemark'); INSERT IGNORE INTO `sys_menu` VALUES (2078, 'menu.config.backupManage', 4, 3, 'backupManage', 'configManage/backupManage/index', '1', '0', 'M', '1', '1', 'configManage:backupManage:index', 'icon-soutubiao', 'supervisor', 1700000000000, NULL, 0, 'menu.config.backupManageRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (2079, 'menu.config.softwareManage', 4, 4, 'softwareManage', 'configManage/softwareManage/index', '1', '0', 'M', '1', '1', 'configManage:softwareManage:index', 'icon-huidingbu', 'supervisor', 1700000000000, NULL, 0, 'menu.config.softwareManageRemark'); +INSERT IGNORE INTO `sys_menu` VALUES (2079, 'menu.config.softwareManage', 4, 4, 'softwareManage', 'configManage/softwareManage/index', '1', '0', 'M', '1', '0', 'configManage:softwareManage:index', 'icon-huidingbu', 'supervisor', 1700000000000, NULL, 0, 'menu.config.softwareManageRemark'); INSERT IGNORE INTO `sys_menu` VALUES (2080, 'menu.ueUser.onlineIMS', 5, 4, 'ims', 'neUser/ims/index', '1', '0', 'M', '1', '1', 'neUser:ims:index', 'icon-xiangmuchengyuan', 'supervisor', 1700000000000, NULL, 0, 'menu.ueUser.onlineIMSRemark'); INSERT IGNORE INTO `sys_menu` VALUES (2081, 'menu.ueUser.onlineUE', 5, 6, 'ue', 'neUser/ue/index', '1', '0', 'M', '1', '1', 'neUser:ue:index', 'icon-xiangmuchengyuan', 'supervisor', 1700000000000, NULL, 0, 'menu.ueUser.onlineUERemark'); INSERT IGNORE INTO `sys_menu` VALUES (2082, 'menu.ueUser.base5G', 5, 7, 'base5G', 'neUser/base5G/index', '1', '0', 'M', '1', '1', 'neUser:base5G:index', 'icon-paixu', 'supervisor', 1700000000000, NULL, 0, 'menu.ueUser.base5GRemark'); @@ -135,17 +118,17 @@ INSERT IGNORE INTO `sys_menu` VALUES (2086, 'menu.trace.pcap', 2083, 3, 'pcap', INSERT IGNORE INTO `sys_menu` VALUES (2087, 'menu.fault', 0, 2, 'faultManage', NULL, '1', '0', 'D', '1', '1', NULL, 'icon-jinggao', 'supervisor', 1700000000000, NULL, 0, 'menu.faultRemark'); INSERT IGNORE INTO `sys_menu` VALUES (2088, 'menu.fault.active', 2129, 1, 'active-alarm', 'faultManage/active-alarm/index', '1', '1', 'M', '1', '1', 'faultManage:active-alarm:index', 'icon-wenjian', 'supervisor', 1700000000000, NULL, 0, 'menu.fault.activemRemark'); INSERT IGNORE INTO `sys_menu` VALUES (2089, 'menu.log', 0, 9, 'logManage', NULL, '1', '0', 'D', '1', '1', NULL, 'icon-fuzhidaima', 'supervisor', 1700000000000, NULL, 0, 'menu.logRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (2091, 'menu.log.mml', 2089, 2, 'mml', 'logManage/mml/index', '1', '1', 'M', '1', '1', 'logManage:mml:index', 'icon-wocanyu', 'supervisor', 1700000000000, NULL, 0, 'menu.log.mmlRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (2092, 'menu.log.alarm', 2089, 3, 'alarm-log', 'logManage/alarm/index', '1', '0', 'M', '1', '1', 'logManage:alarm:index', 'icon-fuzhidaima', 'supervisor', 1700000000000, NULL, 0, 'menu.log.alarmRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (2094, 'menu.log.forwarding', 2089, 7, 'forwarding', 'logManage/forwarding/index', '1', '0', 'M', '1', '1', 'logManage:forwarding:index', 'icon-huizhiguize', 'supervisor', 1700000000000, NULL, 0, 'menu.log.forwardingRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (2095, 'menu.log.set', 2089, 15, 'logSet', 'logManage/logSet/index', '1', '0', 'M', '0', '0', 'logManage:logSet:index', 'icon-you', 'supervisor', 1700000000000, 'supervisor', 1715332370830, 'menu.log.setRemark'); +INSERT IGNORE INTO `sys_menu` VALUES (2091, 'menu.log.mml', 2089, 30, 'mml', 'logManage/mml/index', '1', '1', 'M', '1', '1', 'logManage:mml:index', 'icon-wocanyu', 'supervisor', 1700000000000, NULL, 0, 'menu.log.mmlRemark'); +INSERT IGNORE 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 IGNORE 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 IGNORE 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 IGNORE 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 IGNORE INTO `sys_menu` VALUES (2098, 'menu.fault.set', 2129, 100, 'fault-setting', 'faultManage/fault-setting/index', '1', '0', 'M', '1', '1', 'faultManage/fault-setting/index', 'icon-gonggaodayi', 'supervisor', 1700000000000, NULL, 0, 'menu.fault.setRemark'); INSERT IGNORE 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'); INSERT IGNORE INTO `sys_menu` VALUES (2100, 'menu.perf.task', 2099, 1, 'taskManage', 'perfManage/taskManage/index', '1', '1', 'M', '0', '1', 'perfManage:taskManage:index', 'icon-wofaqi', 'supervisor', 1700000000000, 'admin', 1713177036412, 'menu.perf.taskRemark'); INSERT IGNORE INTO `sys_menu` VALUES (2101, 'menu.perf.data', 2099, 2, 'perfData', 'perfManage/perfData/index', '1', '1', 'M', '0', '1', 'perfManage:perfData:index', 'icon-soutubiao', 'supervisor', 1700000000000, 'admin', 1713177042915, 'menu.perf.dataRemark'); INSERT IGNORE INTO `sys_menu` VALUES (2102, 'menu.perf.report', 2099, 3, 'perfReport', 'perfManage/perfReport/index', '1', '0', 'M', '0', '0', 'perfManage:perfReport:index', 'icon-gonggaodayi', 'supervisor', 1700000000000, NULL, 0, 'menu.perf.reportRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (2103, 'menu.perf.threshold', 2099, 4, 'perfThreshold', 'perfManage/perfThreshold/index', '1', '0', 'M', '0', '0', 'perfManage:perfThreshold:index', 'icon-zhuanrang', 'supervisor', 1700000000000, NULL, 0, 'menu.perf.thresholdRemark'); +INSERT IGNORE INTO `sys_menu` VALUES (2103, 'menu.perf.threshold', 2099, 4, 'perfThreshold', 'perfManage/perfThreshold/index', '1', '0', 'M', '0', '0', 'perfManage:perfThreshold:index', 'icon-zhuanrang', 'supervisor', 1700000000000, 'supervisor', 1715417264697, 'menu.perf.thresholdRemark'); INSERT IGNORE INTO `sys_menu` VALUES (2104, 'menu.perf.kpi', 2099, 5, 'goldTarget', 'perfManage/goldTarget/index', '1', '1', 'M', '1', '1', 'perfManage:goldTarget:index', 'icon-soutubiao', 'supervisor', 1700000000000, NULL, 0, 'menu.perf.kpiRemark'); INSERT IGNORE INTO `sys_menu` VALUES (2105, 'menu.perf.customTarget', 2099, 6, 'customTarget', 'perfManage/customTarget/index', '1', '1', 'M', '0', '0', 'perfManage:customTarget:index', 'icon-fanhui1', 'supervisor', 1700000000000, 'admin', 1712807948673, 'menu.perf.customTargetRemark'); INSERT IGNORE INTO `sys_menu` VALUES (2106, 'menu.perf.set', 2099, 7, 'perfSet', 'perfManage/perfSet/index', '1', '0', 'M', '0', '0', 'perfManage:perfSet:index', 'icon-gonggao', 'supervisor', 1700000000000, NULL, 0, 'menu.perf.setRemark'); @@ -154,10 +137,10 @@ INSERT IGNORE INTO `sys_menu` VALUES (2108, 'menu.mml.ne', 2107, 1, 'neOperate', INSERT IGNORE INTO `sys_menu` VALUES (2109, 'menu.mml.udm', 2107, 2, 'udmOperate', 'mmlManage/udmOperate/index', '1', '1', 'M', '1', '1', 'mmlManage:udmOperate:index', 'icon-gonggaodayi', 'supervisor', 1700000000000, NULL, 0, 'menu.mml.udmRemark'); INSERT IGNORE INTO `sys_menu` VALUES (2110, 'menu.mml.set', 2107, 4, 'mmlSet', 'mmlManage/mmlSet/index', '1', '0', 'M', '1', '1', 'mmlManage:mmlSet:index', 'icon-wofaqi', 'supervisor', 1700000000000, NULL, 0, 'menu.mml.setRemark'); INSERT IGNORE INTO `sys_menu` VALUES (2111, 'menu.mml.omc', 2107, 3, 'omcOperate', 'mmlManage/omcOperate/index', '1', '1', 'M', '1', '1', 'mmlManage:omcOperate:index', 'icon-huizhiguize', 'supervisor', 1700000000000, NULL, 0, 'menu.mml.omcRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (2112, 'menu.config.licenseManage', 4, 5, 'license', 'configManage/license/index', '1', '1', 'M', '1', '1', 'configManage/license/index', 'icon-shang', 'supervisor', 1700000000000, NULL, 0, 'menu.config.licenseManageRemark'); +INSERT IGNORE INTO `sys_menu` VALUES (2112, 'menu.config.licenseManage', 4, 5, 'license', 'configManage/license/index', '1', '1', 'M', '1', '0', 'configManage/license/index', 'icon-shang', 'supervisor', 1700000000000, NULL, 0, 'menu.config.licenseManageRemark'); INSERT IGNORE INTO `sys_menu` VALUES (2113, 'menu.security', 0, 14, 'security', NULL, '1', '0', 'D', '1', '1', NULL, 'icon-suofang', 'supervisor', 1700000000000, NULL, 0, 'menu.securityRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (2114, 'menu.system.systemSet', 1, 12, 'setting', 'system/setting/index', '1', '1', 'M', '1', '1', 'system:setting:index', 'icon-piliang', 'supervisor', 1700000000000, NULL, 0, 'menu.system.systemSetRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (2115, 'menu.system.systemResource', 1, 13, 'monitor', 'monitor/monitor/index', '1', '1', 'M', '1', '1', 'monitor:monitor:info', 'icon-soutubiao', 'supervisor', 1700000000000, NULL, 0, 'menu.system.systemResourceRemark'); +INSERT IGNORE INTO `sys_menu` VALUES (2114, 'menu.system.systemSet', 1, 60, 'setting', 'system/setting/index', '1', '1', 'M', '1', '1', 'system:setting:index', 'icon-piliang', 'supervisor', 1700000000000, NULL, 0, 'menu.system.systemSetRemark'); +INSERT IGNORE 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 IGNORE INTO `sys_menu` VALUES (2118, 'menu.config.configNETreeTable', 4, 2, 'configNETreeTable', 'configManage/configParamTreeTable/index', '1', '1', 'M', '1', '1', 'configManage:configParam:index', 'icon-wofaqi', 'supervisor', 1700000000000, NULL, 0, 'menu.config.configNETreeTableRemark'); INSERT IGNORE 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 IGNORE 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); @@ -169,46 +152,50 @@ INSERT IGNORE INTO `sys_menu` VALUES (2125, 'menu.neUser.nssfAmf', 5, 11, 'nssfA INSERT IGNORE INTO `sys_menu` VALUES (2126, 'menu.monitor.topology', 2130, 10, 'topology', 'monitor/topology/index', '1', '0', 'M', '1', '1', 'monitor:topology:index', 'icon-fangda', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT IGNORE INTO `sys_menu` VALUES (2127, 'menu.monitor.topologyBuild', 2130, 30, 'topologyBuild', 'monitor/topologyBuild/index', '1', '0', 'M', '1', '1', 'monitor:topologyBuild:index', 'icon-fangda', 'supervisor', 1700000000000, 'supervisor', 1700000000000, NULL); INSERT IGNORE INTO `sys_menu` VALUES (2128, 'menu.monitor.topologyArchitecture', 2130, 20, 'topologyArchitecture', 'monitor/topologyArchitecture/index', '1', '0', 'M', '1', '1', 'monitor:topologyArchitecture:index', 'icon-soutubiao', 'supervisor', 1700000000000, 'supervisor', 1700000000000, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (2129, 'menu.alarm', 2087, 10, 'alarm', NULL, '1', '0', 'D', '1', '1', NULL, 'icon-jinggao', 'supervisor', 1704800000000, 'supervisor', 1704847028995, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (2130, 'menu.topology', 2087, 20, 'topology', NULL, '1', '0', 'D', '1', '1', NULL, 'icon-anzhuo', 'supervisor', 1704800000000, 'supervisor', 1704847055540, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (2131, 'menu.dashboard', 2087, 0, 'dashboard', NULL, '1', '0', 'D', '1', '1', NULL, 'icon-soutubiao', 'supervisor', 1705550000000, 'supervisor', 1705550000000, NULL); +INSERT IGNORE INTO `sys_menu` VALUES (2129, 'menu.alarm', 2087, 20, 'alarm', NULL, '1', '0', 'D', '1', '1', NULL, 'icon-jinggao', 'supervisor', 1704800000000, 'supervisor', 1704847028995, NULL); +INSERT IGNORE INTO `sys_menu` VALUES (2130, 'menu.topology', 2087, 10, 'topology', NULL, '1', '0', 'D', '1', '1', NULL, 'icon-anzhuo', 'supervisor', 1704800000000, 'supervisor', 1704847055540, NULL); +INSERT IGNORE INTO `sys_menu` VALUES (2131, 'menu.dashboard', 2087, 15, 'dashboard', NULL, '1', '0', 'D', '1', '1', NULL, 'icon-soutubiao', 'supervisor', 1705550000000, 'supervisor', 1705550000000, NULL); INSERT IGNORE INTO `sys_menu` VALUES (2132, 'menu.dashboard.overview', 2131, 1, 'overview', 'dashboard/overview/index', '1', '0', 'M', '1', '1', 'dashboard:overview:index', 'icon-paixu', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (2133, 'menu.dashboard.cdr', 2140, 40, 'imsCDR', 'dashboard/imsCDR/index', '1', '0', 'M', '1', '1', 'dashboard:cdr:index', 'icon-paixu', 'supervisor', 1705550000000, 'supervisor', 1712751038982, ''); +INSERT IGNORE INTO `sys_menu` VALUES (2133, 'menu.dashboard.imsCDR', 2140, 40, 'imsCDR', 'dashboard/imsCDR/index', '1', '0', 'M', '1', '1', 'dashboard:cdr:index', 'icon-paixu', 'supervisor', 1705550000000, 'supervisor', 1712751038982, ''); INSERT IGNORE INTO `sys_menu` VALUES (2135, 'menu.config.neHost', 4, 15, 'neHost', 'ne/neHost/index', '1', '1', 'M', '1', '1', 'ne:neHost:list', 'icon-fuzhidaima', 'supervisor', 1708583596871, '', 0, ''); INSERT IGNORE INTO `sys_menu` VALUES (2136, 'menu.config.neHostCommand', 4, 18, 'neHostCommand', 'ne/neHostCommand/index', '1', '0', 'M', '1', '1', 'ne:neHostCommand:list', 'icon-fuzhidaima', 'supervisor', 1708583596871, '', 0, ''); INSERT IGNORE INTO `sys_menu` VALUES (2137, 'menu.config.neInfo', 4, 14, 'neInfo', 'ne/neInfo/index', '1', '0', 'M', '1', '1', 'ne:neInfo:list', 'icon-fuzhidaima', 'supervisor', 1708583596871, '', 0, ''); INSERT IGNORE INTO `sys_menu` VALUES (2138, 'menu.dashboard.amfUE', 2141, 1, 'amfUE', 'dashboard/amfUE/index', '1', '0', 'M', '1', '1', 'dashboard:amfUE:index', 'icon-paixu', 'supervisor', 1705550000000, 'supervisor', 1711354049893, ''); -INSERT IGNORE INTO `sys_menu` VALUES (2140, 'menu.monitor.cdr', 2087, 40, 'cdr', '', '1', '0', 'D', '1', '1', '', 'icon-tubiaoku', 'supervisor', 1711352709786, 'supervisor', 1712751135878, ''); -INSERT IGNORE INTO `sys_menu` VALUES (2141, 'menu.monitor.event', 2087, 50, 'event', '', '1', '0', 'D', '1', '1', '', 'icon-gengduo', 'supervisor', 1711352768797, 'supervisor', 1712751125648, ''); +INSERT IGNORE INTO `sys_menu` VALUES (2140, 'menu.monitor.cdr', 2089, 10, 'cdr', '', '1', '0', 'D', '1', '1', '', 'icon-tubiaoku', 'supervisor', 1711352709786, 'supervisor', 1712751135878, ''); +INSERT IGNORE INTO `sys_menu` VALUES (2141, 'menu.monitor.event', 2089, 20, 'event', '', '1', '0', 'D', '1', '1', '', 'icon-gengduo', 'supervisor', 1711352768797, 'supervisor', 1712751125648, ''); INSERT IGNORE INTO `sys_menu` VALUES (2142, 'menu.ne.neQuickSetup', 4, 10, 'neQuickSetup', 'ne/neQuickSetup/index', '1', '1', 'M', '1', '1', 'ne:neQuickSetup:list', 'icon-wofaqi', 'supervisor', 1708580000000, '', 0, ''); INSERT IGNORE INTO `sys_menu` VALUES (2143, 'menu.config.neLicense', 4, 20, 'neLicense', 'ne/neLicense/index', '1', '0', 'M', '1', '1', 'ne:neLicense:list', 'icon-fuzhidaima', 'supervisor', 1708580000000, '', 0, ''); INSERT IGNORE INTO `sys_menu` VALUES (2144, 'menu.config.neSoftware', 4, 23, 'neSoftware', 'ne/neSoftware/index', '1', '0', 'M', '1', '1', 'ne:neSoftware:list', 'icon-fuzhidaima', 'supervisor', 1708580000000, '', 0, ''); INSERT IGNORE INTO `sys_menu` VALUES (2145, 'menu.config.neVersion', 4, 26, 'neVersion', 'ne/neVersion/index', '1', '0', 'M', '1', '1', 'ne:neVersion:list', 'icon-fuzhidaima', 'supervisor', 1708580000000, '', 0, ''); INSERT IGNORE INTO `sys_menu` VALUES (2146, 'menu.ne.neConfPara5G', 4, 8, 'neConfPara5G', 'ne/neConfPara5G/index', '1', '0', 'M', '1', '1', 'ne:neConfPara5G:list', 'icon-wofaqi', 'supervisor', 1708580000000, '', 0, ''); INSERT IGNORE INTO `sys_menu` VALUES (2147, 'menu.fault.event', 2129, 3, 'event', 'faultManage/event/index', '1', '0', 'M', '1', '1', 'faultManage:event:index', 'icon-tubiaoku', 'supervisor', 1717051993146, '', 0, ''); --- tenant management for admin user -INSERT IGNORE INTO `sys_menu` VALUES (2148, 'menu.security.tenant', 2113, 5, 'tenant', 'system/tenant/index', '1', '1', 'M', '1', '1', 'system:tenant:list', 'icon-yuzhanghao1', 'supervisor', 1700000000000, NULL, 0, 'menu.security.tenantRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (2149, 'menu.common.add', 2158, 1, '', '', '1', '1', 'B', '1', '1', 'tenant:subs:add', '#', 'supervisor', 1717491040044, 'supervisor', 1717491508620, ''); -INSERT IGNORE INTO `sys_menu` VALUES (2150, 'menu.common.batchadd', 2158, 1, '', '', '1', '1', 'B', '1', '1', 'tenant:subs:batchAdd', '#', 'supervisor', 1717491040044, 'supervisor', 1717491508620, ''); -INSERT IGNORE INTO `sys_menu` VALUES (2151, 'menu.common.checkdel', 2158, 2, '', '', '1', '1', 'B', '1', '1', 'tenant:subs:checkDel', '#', 'supervisor', 1717491501662, '', 0, ''); -INSERT IGNORE INTO `sys_menu` VALUES (2152, 'menu.common.batchdel', 2158, 3, '', '', '1', '1', 'B', '1', '1', 'tenant:subs:batchDel', '#', 'supervisor', 1717491702980, '', 0, ''); -INSERT IGNORE INTO `sys_menu` VALUES (2153, 'menu.common.loaddata', 2158, 4, '', '', '1', '1', 'B', '1', '1', 'tenant:subs:load', '#', 'supervisor', 1717491838364, '', 0, ''); -INSERT IGNORE INTO `sys_menu` VALUES (2154, 'menu.common.import', 2158, 5, '', '', '1', '1', 'B', '1', '1', 'tenant:subs:import', '#', 'supervisor', 1717491874118, '', 0, ''); --- menu and button for tenant user -INSERT IGNORE INTO `sys_menu` VALUES (2155, 'menu.common.export', 2158, 6, '', '', '1', '1', 'B', '1', '1', 'tenant:subs:export', '#', 'supervisor', 1717491901916, '', 0, ''); -INSERT IGNORE INTO `sys_menu` VALUES (2156, 'menu.common.checkexport', 2158, 7, '', '', '1', '1', 'B', '1', '1', 'tenant:subs:checkExport', '#', 'supervisor', 1717492147021, '', 0, ''); -INSERT IGNORE INTO `sys_menu` VALUES (2157, 'menu.tenant.overview', 0, 90, 'overview', 'index/index', '1', '0', 'M', '0', '1', 'index:index', 'icon-paixu', 'admin', 1716445027021, 'supervisor', 1716453627718, 'Overview interface for tenants'); -INSERT IGNORE INTO`sys_menu` VALUES (2158, 'menu.tenant.subscriber', 0, 91, 'sub', 'tenant/sub/index', '1', '1', 'M', '1', '1', 'tenant:sub:index', 'icon-xiangmuchengyuan', 'supervisor', 1716446941420, 'supervisor', 1716453604732, 'UDM Subscriber Menu'); -INSERT IGNORE INTO `sys_menu` VALUES (2159, 'menu.tenant.onlineUE', 0, 92, 'ue', 'tenant/ue/index', '1', '0', 'M', '1', '1', 'tenant:ue:index', 'icon-xiangmuchengyuan', 'supervisor', 1718697278784, '', 0, ''); -INSERT IGNORE INTO `sys_menu` VALUES (2160, 'menu.tenant.radio', 0, 93, 'base5G', 'tenant/base5G/index', '1', '0', 'M', '1', '1', 'tenant:base5G:index', 'icon-paixu', 'supervisor', 1718696648153, '', 0, ''); -INSERT IGNORE INTO `sys_menu` VALUES (2161, 'menu.tenant.imsCDR', 0, 94, 'imsCDR', 'tenant/imsCDR/index', '1', '0', 'M', '0', '1', 'tenant:imsCDR:index', 'icon-paixu', 'supervisor', 1716454666743, '', 0, ''); -INSERT IGNORE INTO `sys_menu` VALUES (2162, 'menu.tenant.smfCDR', 0, 95, 'smfCDR', 'tenant/smfCDR/index', '1', '0', 'M', '0', '1', 'tenant:smfCDR:index', 'icon-paixu', 'supervisor', 1716454666743, '', 0, ''); -INSERT IGNORE INTO `sys_menu` VALUES (2163, 'menu.tenant.amfUE', 0, 96, 'amfUE', 'tenant/amfUE/index', '1', '0', 'M', '0', '1', 'tenant:amfUE:index', 'icon-paixu', 'supervisor', 1716454666743, 'supervisor', 1718621454168, ''); -INSERT IGNORE INTO `sys_menu` VALUES (2164, 'menu.tenant.mmeUE', 0, 97, 'mmeUE', 'tenant/mmeUE/index', '1', '0', 'M', '0', '1', 'dashboard:mmeUE:index', 'icon-paixu', 'supervisor', 1716454666743, 'supervisor', 1718621454168, ''); -INSERT IGNORE INTO `sys_menu` VALUES (2165, 'menu.tenant.log', 0, 98, 'operate', 'tenant/operate/index', '1', '1', 'M', '1', '1', 'tenant:operate:list', 'icon-fuzhidaima', 'supervisor', 1716447063341, 'supervisor', 1716453612175, 'Operation log menu'); --- end for tenant user +INSERT IGNORE INTO `sys_menu` VALUES (2148, 'menu.dashboard.smfCDR', 2140, 40, 'smfCDR', 'dashboard/smfCDR/index', '1', '0', 'M', '1', '1', 'dashboard:cdr:index', 'icon-paixu', 'supervisor', 1705550000000, 'supervisor', 1712751038982, ''); +INSERT IGNORE INTO `sys_menu` VALUES (2149, 'menu.dashboard.mmeUE', 2141, 5, 'mmeUE', 'dashboard/mmeUE/index', '1', '0', 'M', '1', '1', 'dashboard:mmeUE:index', 'icon-paixu', 'supervisor', 1705550000000, 'supervisor', 1711354049893, ''); +INSERT IGNORE INTO `sys_menu` VALUES (2150, 'menu.system.user.editPost', 100, 9, '', '', '1', '1', 'B', '1', '1', 'system:user:editPost', '#', 'supervisor', 1700000000000, '', 0, ''); --- 指定记录条件更新 +-- 多租户 + +-- tenant management for admin user +INSERT IGNORE INTO `sys_menu` VALUES (12148, 'menu.security.tenant', 2113, 5, 'tenant', 'system/tenant/index', '1', '1', 'M', '1', '1', 'system:tenant:list', 'icon-yuzhanghao1', 'supervisor', 1700000000000, NULL, 0, 'menu.security.tenantRemark'); +INSERT IGNORE INTO `sys_menu` VALUES (12149, 'menu.common.add', 2158, 1, '', '', '1', '1', 'B', '1', '1', 'tenant:subs:add', '#', 'supervisor', 1717491040044, 'supervisor', 1717491508620, ''); +INSERT IGNORE INTO `sys_menu` VALUES (12150, 'menu.common.batchadd', 2158, 1, '', '', '1', '1', 'B', '1', '1', 'tenant:subs:batchAdd', '#', 'supervisor', 1717491040044, 'supervisor', 1717491508620, ''); +INSERT IGNORE INTO `sys_menu` VALUES (12151, 'menu.common.checkdel', 2158, 2, '', '', '1', '1', 'B', '1', '1', 'tenant:subs:checkDel', '#', 'supervisor', 1717491501662, '', 0, ''); +INSERT IGNORE INTO `sys_menu` VALUES (12152, 'menu.common.batchdel', 2158, 3, '', '', '1', '1', 'B', '1', '1', 'tenant:subs:batchDel', '#', 'supervisor', 1717491702980, '', 0, ''); +INSERT IGNORE INTO `sys_menu` VALUES (12153, 'menu.common.loaddata', 2158, 4, '', '', '1', '1', 'B', '1', '1', 'tenant:subs:load', '#', 'supervisor', 1717491838364, '', 0, ''); +INSERT IGNORE INTO `sys_menu` VALUES (12154, 'menu.common.import', 2158, 5, '', '', '1', '1', 'B', '1', '1', 'tenant:subs:import', '#', 'supervisor', 1717491874118, '', 0, ''); +-- menu and button for tenant user +INSERT IGNORE INTO `sys_menu` VALUES (12155, 'menu.common.export', 2158, 6, '', '', '1', '1', 'B', '1', '1', 'tenant:subs:export', '#', 'supervisor', 1717491901916, '', 0, ''); +INSERT IGNORE INTO `sys_menu` VALUES (12156, 'menu.common.checkexport', 2158, 7, '', '', '1', '1', 'B', '1', '1', 'tenant:subs:checkExport', '#', 'supervisor', 1717492147021, '', 0, ''); +INSERT IGNORE INTO `sys_menu` VALUES (12157, 'menu.tenant.overview', 0, 90, 'overview', 'index/index', '1', '0', 'M', '0', '1', 'index:index', 'icon-paixu', 'admin', 1716445027021, 'supervisor', 1716453627718, 'Overview interface for tenants'); +INSERT IGNORE INTO `sys_menu` VALUES (12158, 'menu.tenant.subscriber', 0, 91, 'sub', 'tenant/sub/index', '1', '1', 'M', '1', '1', 'tenant:sub:index', 'icon-xiangmuchengyuan', 'supervisor', 1716446941420, 'supervisor', 1716453604732, 'UDM Subscriber Menu'); +INSERT IGNORE INTO `sys_menu` VALUES (12159, 'menu.tenant.onlineUE', 0, 92, 'ue', 'tenant/ue/index', '1', '0', 'M', '1', '1', 'tenant:ue:index', 'icon-xiangmuchengyuan', 'supervisor', 1718697278784, '', 0, ''); +INSERT IGNORE INTO `sys_menu` VALUES (12160, 'menu.tenant.radio', 0, 93, 'base5G', 'tenant/base5G/index', '1', '0', 'M', '1', '1', 'tenant:base5G:index', 'icon-paixu', 'supervisor', 1718696648153, '', 0, ''); +INSERT IGNORE INTO `sys_menu` VALUES (12161, 'menu.tenant.imsCDR', 0, 94, 'imsCDR', 'tenant/imsCDR/index', '1', '0', 'M', '0', '1', 'tenant:imsCDR:index', 'icon-paixu', 'supervisor', 1716454666743, '', 0, ''); +INSERT IGNORE INTO `sys_menu` VALUES (12162, 'menu.tenant.smfCDR', 0, 95, 'smfCDR', 'tenant/smfCDR/index', '1', '0', 'M', '0', '1', 'tenant:smfCDR:index', 'icon-paixu', 'supervisor', 1716454666743, '', 0, ''); +INSERT IGNORE INTO `sys_menu` VALUES (12163, 'menu.tenant.amfUE', 0, 96, 'amfUE', 'tenant/amfUE/index', '1', '0', 'M', '0', '1', 'tenant:amfUE:index', 'icon-paixu', 'supervisor', 1716454666743, 'supervisor', 1718621454168, ''); +INSERT IGNORE INTO `sys_menu` VALUES (12164, 'menu.tenant.mmeUE', 0, 97, 'mmeUE', 'tenant/mmeUE/index', '1', '0', 'M', '0', '1', 'dashboard:mmeUE:index', 'icon-paixu', 'supervisor', 1716454666743, 'supervisor', 1718621454168, ''); +INSERT IGNORE INTO `sys_menu` VALUES (12165, 'menu.tenant.log', 0, 98, 'operate', 'tenant/operate/index', '1', '1', 'M', '1', '1', 'tenant:operate:list', 'icon-fuzhidaima', 'supervisor', 1716447063341, 'supervisor', 1716453612175, 'Operation log menu'); +-- end for tenant user -- update department management to non visible UPDATE `sys_menu` SET `visible` = '0' WHERE `menu_id` = 104; diff --git a/database/upgrade/upg_sys_role_dept.sql b/database/upgrade/upg_sys_role_dept.sql index f8e2b11a..9664021e 100644 --- a/database/upgrade/upg_sys_role_dept.sql +++ b/database/upgrade/upg_sys_role_dept.sql @@ -1,10 +1,9 @@ SET FOREIGN_KEY_CHECKS=0; -CREATE TABLE - IF NOT EXISTS `sys_role_dept` ( - `role_id` bigint(20) NOT NULL COMMENT '角色ID', - `dept_id` bigint(20) NOT NULL COMMENT '部门ID', - PRIMARY KEY (`role_id`, `dept_id`) USING BTREE - ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '角色和部门关联表' ROW_FORMAT = Dynamic; +CREATE TABLE IF NOT EXISTS `sys_role_dept` ( + `role_id` bigint NOT NULL COMMENT '角色ID', + `dept_id` bigint NOT NULL COMMENT '部门ID', + PRIMARY KEY (`role_id`,`dept_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='角色和部门关联表'; SET FOREIGN_KEY_CHECKS=1; \ No newline at end of file diff --git a/database/upgrade/upg_sys_role_menu.sql b/database/upgrade/upg_sys_role_menu.sql index 9d4d8c87..9a96d20f 100644 --- a/database/upgrade/upg_sys_role_menu.sql +++ b/database/upgrade/upg_sys_role_menu.sql @@ -223,6 +223,8 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2140); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2141); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2143); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2147); +INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2148); +INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2149); INSERT IGNORE INTO `sys_role_menu` VALUES (4, 1); INSERT IGNORE INTO `sys_role_menu` VALUES (4, 5); INSERT IGNORE INTO `sys_role_menu` VALUES (4, 112); @@ -269,6 +271,8 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2138); INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2140); INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2141); INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2147); +INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2148); +INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2149); INSERT IGNORE INTO `sys_role_menu` VALUES (5, 1); INSERT IGNORE INTO `sys_role_menu` VALUES (5, 5); INSERT IGNORE INTO `sys_role_menu` VALUES (5, 112); diff --git a/database/upgrade/upg_sys_user.sql b/database/upgrade/upg_sys_user.sql index c5513a69..d4af3c9c 100644 --- a/database/upgrade/upg_sys_user.sql +++ b/database/upgrade/upg_sys_user.sql @@ -21,22 +21,7 @@ CREATE TABLE IF NOT EXISTS `sys_user` ( `update_time` bigint DEFAULT '0' COMMENT '更新时间', `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '备注', PRIMARY KEY (`user_id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=100 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='用户信息表'; - ---DELETE FROM `sys_user` WHERE `user_id` IN (1,2); - -INSERT IGNORE INTO `sys_user` (`user_id`, `dept_id`, `user_name`, `nick_name`, `user_type`, `email`, `phonenumber`, `sex`, `avatar`, `password`, `status`, `del_flag`, `login_ip`, `login_date`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1, 100, 'supervisor', 'supervisor', 'sys', '', '', '', '', '$2a$10$QgIcp6yuOEGrEU0TNU12K.uQRLbcufesEU7hiRYlRSSdUO7OAkoTq', '1', '0', '192.168.5.58', 1718691585188, '', 0, 'supervisor', 1718691585188, ''); -INSERT IGNORE INTO `sys_user` (`user_id`, `dept_id`, `user_name`, `nick_name`, `user_type`, `email`, `phonenumber`, `sex`, `avatar`, `password`, `status`, `del_flag`, `login_ip`, `login_date`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (2, 100, 'admin', 'admin', 'sys', '', '', '', '', '$2a$10$QgIcp6yuOEGrEU0TNU12K.uQRLbcufesEU7hiRYlRSSdUO7OAkoTq', '1', '0', '192.168.2.140', 1718766767851, '', 0, 'admin', 1718766767852, ''); -INSERT IGNORE INTO `sys_user` (`user_id`, `dept_id`, `user_name`, `nick_name`, `user_type`, `email`, `phonenumber`, `sex`, `avatar`, `password`, `status`, `del_flag`, `login_ip`, `login_date`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (3, 100, 'manager', 'manager', 'sys', '', '', '', '', '$2a$10$RND3fUw9Ai.WcggYSI57tu.u3OIlktdPxFzlWkmiHC1paV038t0I2', '1', '0', '127.0.0.1', 0, '', 0, '', 0, ''); -INSERT IGNORE INTO `sys_user` (`user_id`, `dept_id`, `user_name`, `nick_name`, `user_type`, `email`, `phonenumber`, `sex`, `avatar`, `password`, `status`, `del_flag`, `login_ip`, `login_date`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (4, 100, 'monitor', 'monitor', 'sys', '', '', '', '', '$2a$10$t3zpKQ0olECotFyI1yO43.tCoS0EXoSRBDcqwl09xvrsmn14qFHHy', '1', '0', '127.0.0.1', 0, '', 0, '', 0, ''); - --- 20240508 -ALTER TABLE `sys_user` MODIFY COLUMN `dept_id` bigint NULL DEFAULT 0 COMMENT '部门ID' AFTER `user_id`; -ALTER TABLE `sys_user` MODIFY COLUMN `user_name` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '用户账号' AFTER `dept_id`; -ALTER TABLE `sys_user` MODIFY COLUMN `nick_name` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '用户昵称' AFTER `user_name`; -ALTER TABLE `sys_user` MODIFY COLUMN `email` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '用户邮箱' AFTER `user_type`; -ALTER TABLE `sys_user` MODIFY COLUMN `phonenumber` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '手机号码' AFTER `email`; -ALTER TABLE `sys_user` MODIFY COLUMN `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注' AFTER `update_time`; +) ENGINE=InnoDB AUTO_INCREMENT=100 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='用户信息表'; -- multi-tenancy ALTER TABLE `sys_user` ADD COLUMN IF NOT EXISTS `tenant_id` bigint(20) NULL DEFAULT NULL DEFAULT NULL COMMENT 'Tenant ID' AFTER `dept_id`; diff --git a/database/upgrade/upg_sys_user_post.sql b/database/upgrade/upg_sys_user_post.sql index a80ab08c..6f782221 100644 --- a/database/upgrade/upg_sys_user_post.sql +++ b/database/upgrade/upg_sys_user_post.sql @@ -1,14 +1,11 @@ SET FOREIGN_KEY_CHECKS=0; -DROP TABLE IF EXISTS `sys_user_post`; -CREATE TABLE `sys_user_post` ( - `user_id` bigint(20) NOT NULL COMMENT '用户ID', - `post_id` bigint(20) NOT NULL COMMENT '岗位ID', - PRIMARY KEY (`user_id`, `post_id`) USING BTREE - ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '用户与岗位关联表' ROW_FORMAT = Dynamic; - -INSERT IGNORE INTO - `sys_user_post` (`user_id`, `post_id`) -VALUES (1, 1); +CREATE TABLE IF NOT EXISTS `sys_user_post` ( + `user_id` bigint NOT NULL COMMENT '用户ID', + `post_id` bigint NOT NULL COMMENT '岗位ID', + PRIMARY KEY (`user_id`,`post_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='用户与岗位关联表'; + +INSERT IGNORE INTO `sys_user_post` VALUES (1,1),(2,2); SET FOREIGN_KEY_CHECKS=1; \ No newline at end of file diff --git a/database/upgrade/upg_ue_event_amf.sql b/database/upgrade/upg_ue_event_amf.sql new file mode 100644 index 00000000..7eebce3e --- /dev/null +++ b/database/upgrade/upg_ue_event_amf.sql @@ -0,0 +1,37 @@ +/* + 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 : omc_db + + Target Server Type : MariaDB + Target Server Version : 100338 (10.3.38-MariaDB) + File Encoding : 65001 + + Date: 22/01/2024 17:03:39 +*/ + +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for ue_event_amf +-- ---------------------------- +CREATE TABLE IF NOT EXISTS `ue_event_amf` ( + `id` int NOT NULL AUTO_INCREMENT, + `ne_type` varchar(32) COLLATE utf8mb4_general_ci DEFAULT NULL, + `ne_name` varchar(64) COLLATE utf8mb4_general_ci DEFAULT NULL, + `rm_uid` varchar(32) COLLATE utf8mb4_general_ci DEFAULT NULL, + `timestamp` int DEFAULT NULL, + `event_type` varchar(16) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT 'auth-result/detach/cm-state', + `event_json` longtext COLLATE utf8mb4_general_ci, + `created_at` datetime DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`id`) USING BTREE, + KEY `id` (`id`) USING BTREE, + KEY `idx_type_timestamp` (`ne_type`,`timestamp`,`event_type`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; + +SET FOREIGN_KEY_CHECKS = 1; diff --git a/database/upgrade/upg_ue_event_mme.sql b/database/upgrade/upg_ue_event_mme.sql new file mode 100644 index 00000000..f9d3b1b2 --- /dev/null +++ b/database/upgrade/upg_ue_event_mme.sql @@ -0,0 +1,21 @@ +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for ue_event_mme +-- ---------------------------- +CREATE TABLE IF NOT EXISTS `ue_event_mme` ( + `id` int NOT NULL AUTO_INCREMENT, + `ne_type` varchar(32) COLLATE utf8mb4_general_ci DEFAULT NULL, + `ne_name` varchar(64) COLLATE utf8mb4_general_ci DEFAULT NULL, + `rm_uid` varchar(32) COLLATE utf8mb4_general_ci DEFAULT NULL, + `timestamp` int DEFAULT NULL, + `event_type` varchar(16) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT 'ECM STATUS, EMM STATUS', + `event_json` longtext COLLATE utf8mb4_general_ci, + `created_at` datetime DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`id`) USING BTREE, + KEY `id` (`id`) USING BTREE, + KEY `idx_type_timestamp` (`ne_type`,`timestamp`,`event_type`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; + +SET FOREIGN_KEY_CHECKS = 1; diff --git a/database/upgrade/zupgrade.sql b/database/upgrade/zupgrade.sql index bad64162..f1ae3e39 100644 --- a/database/upgrade/zupgrade.sql +++ b/database/upgrade/zupgrade.sql @@ -5,9 +5,6 @@ MODIFY COLUMN `value` bigint NULL DEFAULT 0 AFTER `kpi_id`; ALTER TABLE `ne_link` DROP INDEX IF EXISTS `idx_netype_neid`; -ALTER TABLE `config` -ADD COLUMN IF NOT EXISTS `comment` varchar(255) NULL AFTER `update_time`; - ALTER TABLE `nbi_operation_log` MODIFY COLUMN `created_at` datetime NULL DEFAULT NULL AFTER `log_time`; @@ -29,30 +26,19 @@ ADD COLUMN IF NOT EXISTS `comment` varchar(255) NULL AFTER `account_id`; ALTER TABLE `trace_task` ADD COLUMN IF NOT EXISTS `account_id` varchar(32) NULL AFTER `status`, ADD COLUMN IF NOT EXISTS `comment` varchar(255) NULL AFTER `account_id`; - -INSERT IGNORE INTO `config` (`id`, `module_name`, `config_tag`, `title_json`, `value`, `value_json`, `comment`) -VALUES ('37', 'System', 'logo', '{\"cn\":\"系统LOGO\",\"en\":\"System LOGO\"}', 'logo30.png', '', ''); - -ALTER TABLE `param_config` -ADD COLUMN IF NOT EXISTS `method` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '*' COMMENT 'method allow: \"get\", \"get,post,put\", \"*\"' AFTER `top_display`; DELETE FROM trace_data WHERE timestamp LIKE '2023-%'; ALTER TABLE `trace_data` MODIFY COLUMN `timestamp` bigint NULL DEFAULT NULL AFTER `msg_direct`; -ALTER TABLE `param_config` -MODIFY COLUMN `method` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT 'method allow: \"get\", \"get,post,put\", \"delete\"' AFTER `top_display`; - ALTER TABLE `trace_data` ADD COLUMN IF NOT EXISTS `length` int NULL AFTER `msg_direct`; -ALTER TABLE - `ne_backup` +ALTER TABLE `ne_backup` ADD COLUMN IF NOT EXISTS `comment` varchar(255) NULL AFTER `md5_sum`; -ALTER TABLE - `mml_command` +ALTER TABLE `mml_command` ADD COLUMN IF NOT EXISTS `status` enum('Active', 'Inactive') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT 'Active' COMMENT '激活: Active 未激活: Inactive' AFTER `param_json`; @@ -61,41 +47,18 @@ SET `status` = 'Inactive' WHERE `category` = 'licenseManagement'; -ALTER TABLE - `mml_subscriber` +ALTER TABLE `mml_subscriber` ADD COLUMN IF NOT EXISTS `status` enum('Active', 'Inactive') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT 'Active' COMMENT '激活: Active 未激活: Inactive' AFTER `param_json`; -ALTER TABLE - `mml_system` +ALTER TABLE `mml_system` ADD COLUMN IF NOT EXISTS `status` enum('Active', 'Inactive') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT 'Active' COMMENT '激活: Active 未激活: Inactive' AFTER `param_json`; -ALTER TABLE - `system_log` +ALTER TABLE `system_log` ADD COLUMN IF NOT EXISTS `operation` varchar(16) NULL AFTER `process_id`; -ALTER TABLE `gold_kpi` -ADD COLUMN IF NOT EXISTS `granularity` tinyint NULL DEFAULT 60 COMMENT '时间颗粒度: 5/10/.../60/300 (秒)' AFTER `index`; - -ALTER TABLE `gold_kpi` -ADD INDEX IF NOT EXISTS `idx_kpiid` (`kpi_id`) USING BTREE, -ADD INDEX IF NOT EXISTS `idx_timestamp` (`timestamp`) USING BTREE; - -ALTER TABLE `gold_kpi` -DROP INDEX IF EXISTS `idx_st_nt_id`, -ADD INDEX IF NOT EXISTS `idx_rtds_id`(`rm_uid` ASC, `ne_type` ASC, `date` ASC, `start_time` ASC) USING BTREE; - -ALTER TABLE `gold_kpi` -ADD INDEX IF NOT EXISTS `idx_date` (`date`) USING BTREE; - -ALTER TABLE `gold_kpi` -ADD UNIQUE INDEX IF NOT EXISTS `idx_pk_id` (`id`) USING BTREE; - -ALTER TABLE `kpi_title` -ADD INDEX IF NOT EXISTS `idx_kpi_id` (`kpi_id`) USING BTREE; - ALTER TABLE `alarm` ADD UNIQUE INDEX IF NOT EXISTS `idx_pk_id` (`id`) USING BTREE; diff --git a/database/upgvue3/upg_chart_graph.sql b/database/upgvue3/upg_chart_graph.sql index 64c08ac4..5189efcc 100644 --- a/database/upgvue3/upg_chart_graph.sql +++ b/database/upgvue3/upg_chart_graph.sql @@ -20,7 +20,6 @@ SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for chart_graph -- ---------------------------- -DROP TABLE IF EXISTS `chart_graph`; CREATE TABLE `chart_graph` ( `row_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '记录ID', `row_type` enum('node','edge','combo') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '记录类型', @@ -51,143 +50,143 @@ CREATE TABLE `chart_graph` ( -- ---------------------------- -- Records of chart_graph -- ---------------------------- -INSERT INTO `chart_graph` VALUES (1, 'node', 'hello', 'node-1', 'rect', 0, -218, -20, '[80,40]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"#ff0000\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ff0000\"}', 'Node-1', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2, 'node', 'hello', 'node-2', 'star', 0, 82, -15, '60', '{\"height\":25,\"img\":\"\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"#2bff00\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#05ff16\"}', 'Node-2', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (3, 'edge', 'hello', 'node-1~1704427926706~node-2', 'polyline', 0, 0, 0, '', '', '', '', '', 'node-1', 'node-2', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"endArrow\":true,\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":5,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#0062ff\"}', '1 to 2', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1177, 'node', 'demo', 'one', 'circle-animate-shape-r', 0, -123.911, 5, '60', '{\"height\":25,\"img\":\"\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"#00ff91\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ff4d4d\"}', 'One', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1178, 'node', 'demo', 'two', 'circle-animate-shape-stroke', 0, 228.652, 10.3481, '60', '{\"height\":25,\"img\":\"\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"#fe5a01\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#9497ff\"}', 'Two', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1179, 'node', 'demo', 'three', 'rect-animate-state', 0, 65, 127, '[80,40]', '{\"height\":25,\"img\":\"\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"#ffffff\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'Three', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#000000\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1180, 'edge', 'demo', 'one~1704764271132~two', 'cubic-animate-line-dash', 0, 0, 0, '', '', '', '', '', 'one', 'two', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"endArrow\":true,\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":1,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#fbfe39\"}', 'one-two', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1181, 'edge', 'demo', 'two~1704764297866~three', 'cubic-animate-circle-move', 0, 0, 0, '', '', '', '', '', 'two', 'three', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":1,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#80f0ff\"}', 'two-three', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1182, 'edge', 'demo', 'three~1704764353721~one', 'line-animate-state', 0, 0, 0, '', '', '', '', '', 'three', 'one', '', '', '', '', '{\"cursor\":\"pointer\",\"lineWidth\":1,\"offset\":20,\"radius\":2,\"stroke\":\"#ffffff\"}', 'three-one', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1725, 'node', '5GC System Architecture', 'Base', 'image-animate-state', 0, -530.671, -66.6639, '[64,64]', '{\"height\":25,\"img\":\"\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/base.svg', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#ffffff\"}', '(R)AN', '{\"offset\":4,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1726, 'node', '5GC System Architecture', 'DN', 'image-animate-state', 0, -529.46, 62.62, '[64,64]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/cloud.svg', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#ffffff\"}', 'DN', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1727, 'node', '5GC System Architecture', 'OMC', 'image-animate-state', 0, -527.746, -346.76, '[64,64]', '{\"height\":25,\"img\":\"\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/service_db.svg', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#783636\"}', 'OMC', '{\"offset\":4,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1728, 'node', '5GC System Architecture', 'IMS', 'rect-animate-state', 23, 22.4671, -231.155, '[80,40]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"#f5222d\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f1212c\"}', 'IMS', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1729, 'node', '5GC System Architecture', 'NSSF', 'rect-animate-state', 22, -116.316, -335.56, '[80,40]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"#f5222d\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'NSSF', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1730, 'node', '5GC System Architecture', 'UPF', 'rect-animate-state', 21, -268.005, -52.6272, '[80,40]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"#f5222d\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'UPF', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1731, 'node', '5GC System Architecture', 'UE', 'image', 14, -532.589, -231.622, '[64,64]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/mobile.svg', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'UE', '{\"offset\":4,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1732, 'node', '5GC System Architecture', 'PCF', 'rect-animate-state', 20, -267.905, -152.894, '[80,40]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"#f5222d\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'PCF', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1733, 'node', '5GC System Architecture', 'SMF', 'rect-animate-state', 19, -117.66, -53.1161, '[80,40]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"#f5222d\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f0212c\"}', 'SMF', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1734, 'node', '5GC System Architecture', 'AMF', 'rect-animate-state', 18, -268.316, -235.06, '[80,40]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"#f5222d\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'AMF', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1735, 'node', '5GC System Architecture', 'UDM', 'rect-animate-state', 17, 19.8172, -333.371, '[80,40]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"#f5222d\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'UDM', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1736, 'node', '5GC System Architecture', 'AUSF', 'rect-animate-state', 16, -269.316, -335.56, '[80,40]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"#f5222d\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'AUSF', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1737, 'node', '5GC System Architecture', 'NRF', 'rect', 15, 26.4865, -150.732, '[80,40]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '5GC', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"#f5222d\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#f5222d\"}', 'NRF', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1738, 'node', '5GC System Architecture', 'LMF', 'rect', 14, -266.158, 48.8341, '[80,40]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '5GC', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"#f5222d\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#f5222d\"}', 'LMF', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1739, 'node', '5GC System Architecture', 'NEF', 'rect', 13, -120.613, -149.621, '[80,40]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"#f5222d\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'NEF', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1740, 'node', '5GC System Architecture', 'MME', 'rect', 12, -118.002, -233.655, '[80,40]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '5GC', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"#f5222d\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#f5222d\"}', 'MME', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1741, 'node', '5GC System Architecture', 'N3IWF', 'rect', 11, 20.4198, -58.2659, '[80,40]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '5GC', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"#f5222d\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#f5222d\"}', 'N3IWF', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1742, 'edge', '5GC System Architecture', '5GC~1704764825481~Base', 'cubic-animate-line-dash', 0, 0, 0, '', '', '', '', '', 'Base', '5GC', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":1,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'N2', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1743, 'edge', '5GC System Architecture', 'UE~1704534736553~AMF', 'cubic-animate-line-dash', 0, 0, 0, '', '', '', '', '', 'UE', 'Base', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":1,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1744, 'edge', '5GC System Architecture', 'RAN~1704534829539~UPF', 'line-animate-state', 0, 0, 0, '', '', '', '', '', 'Base', 'UPF', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":1,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'N3', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1745, 'edge', '5GC System Architecture', 'DN~1704534869360~UPF', 'cubic-animate-line-dash', 0, 0, 0, '', '', '', '', '', 'DN', 'UPF', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":1,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'N6', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1746, 'edge', '5GC System Architecture', 'OMC~1704535021073~5GC', 'line-animate-state', 0, 0, 0, '', '', '', '', '', 'OMC', '5GC', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":1,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1747, 'edge', '5GC System Architecture', 'SMF~1704765447548~UPF', 'line', 0, 0, 0, '', '', '', '', '', 'SMF', 'UPF', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":1,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'N4', '{\"autoRotate\":true,\"position\":\"end\",\"refX\":-12,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1748, 'combo', '5GC System Architecture', '5GC', 'rect', 10, -121.415, -143.363, '[40,40]', '', '', '', '', '', '', '', '[40,45,40,45]', '', '[{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"IMS\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"NSSF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"UPF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"PCF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"SMF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"AMF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"UDM\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"AUSF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"NRF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"LMF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"NEF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"MME\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"N3IWF\",\"itemType\":\"node\"}]', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"grab\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"fill\":\"#ffffff\",\"fillOpacity\":0.1,\"height\":425.39430000000004,\"highlight\":{\"fill\":\"rgb(253, 253, 253)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(253, 253, 253)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"lineWidth\":1,\"r\":212.69715000000002,\"radius\":2,\"selected\":{\"fill\":\"rgb(253, 253, 253)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\",\"width\":376.8029}', 'Core Network', '{\"position\":\"top\",\"refX\":10,\"refY\":10,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1869, 'node', '5GC System Architecture2', 'Base', 'image-animate-state', 0, -530.671, -66.6639, '[64,64]', '{\"height\":25,\"img\":\"\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/base.svg', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#ffffff\"}', '(R)AN', '{\"offset\":4,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1870, 'node', '5GC System Architecture2', 'DN', 'image-animate-state', 0, -544.46, 45.62, '[60,60]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/cloud6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#ffffff\"}', 'DN', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1871, 'node', '5GC System Architecture2', 'OMC', 'image-animate-state', 0, -531.746, -291.76, '[64,64]', '{\"height\":25,\"img\":\"\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/omc6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#783636\"}', 'OMC', '{\"offset\":4,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1872, 'node', '5GC System Architecture2', 'IMS', 'image-animate-state', 23, 32.8038, -208.015, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/ims6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f1212c\"}', 'IMS', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1873, 'node', '5GC System Architecture2', 'NSSF', 'image-animate-state', 22, -103.637, -294.34, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/nssf6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'NSSF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1874, 'node', '5GC System Architecture2', 'UPF', 'image-animate-state', 21, -251.745, -30.487, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/upf6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'UPF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1875, 'node', '5GC System Architecture2', 'UE', 'image', 14, -535.589, -178.622, '[64,64]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/mobile.svg', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'UE', '{\"offset\":4,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1876, 'node', '5GC System Architecture2', 'PCF', 'image-animate-state', 20, -251.569, -121.754, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/pcf6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'PCF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1877, 'node', '5GC System Architecture2', 'SMF', 'image-animate-state', 19, -102.324, -30.9759, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/smf6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f0212c\"}', 'SMF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1878, 'node', '5GC System Architecture2', 'AMF', 'image-animate-state', 18, -252.824, -212.92, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/amf6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'AMF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1879, 'node', '5GC System Architecture2', 'UDM', 'image-animate-state', 17, 30.371, -283.065, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/udm6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'UDM', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1880, 'node', '5GC System Architecture2', 'AUSF', 'image-animate-state', 16, -248.56, -291.872, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/ausf6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'AUSF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1881, 'node', '5GC System Architecture2', 'NRF', 'image-animate-state', 15, 31.0121, -130.814, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/nrf6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'NRF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1882, 'node', '5GC System Architecture2', 'LMF', 'image-animate-state', 14, -247.573, 58.3507, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/lmf.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'LMF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1883, 'node', '5GC System Architecture2', 'NEF', 'image-animate-state', 13, -102.277, -127.481, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/nef6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'NEF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1884, 'node', '5GC System Architecture2', 'MME', 'image-animate-state', 12, -102.666, -211.515, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/mme6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'MME', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1885, 'node', '5GC System Architecture2', 'N3IWF', 'image-animate-state', 11, 32.0232, -36.1257, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/n3iwf61.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'N3IWF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1886, 'edge', '5GC System Architecture2', 'RAN~1704534829539~UPF', 'line-animate-state', 0, 0, 0, '', '', '', '', '', 'Base', 'UPF', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":1,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'N3', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1887, 'edge', '5GC System Architecture2', 'DN~1704534869360~UPF', 'cubic-animate-line-dash', 0, 0, 0, '', '', '', '', '', 'DN', 'UPF', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":1,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'N6', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1888, 'edge', '5GC System Architecture2', 'OMC~1704535021073~5GC', 'line-animate-state', 0, 0, 0, '', '', '', '', '', 'OMC', '5GC', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":1,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1889, 'edge', '5GC System Architecture2', 'SMF~1704765447548~UPF', 'line', 0, 0, 0, '', '', '', '', '', 'SMF', 'UPF', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":1,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'N4', '{\"autoRotate\":true,\"position\":\"end\",\"refX\":-12,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1890, 'edge', '5GC System Architecture2', '5GC~1704764825481~Base', 'cubic-animate-line-dash', 0, 0, 0, '', '', '', '', '', 'Base', '5GC', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":1,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'N2', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1891, 'edge', '5GC System Architecture2', 'UE~1704534736553~AMF', 'cubic-animate-line-dash', 0, 0, 0, '', '', '', '', '', 'UE', 'Base', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":1,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (1892, 'combo', '5GC System Architecture2', '5GC', 'rect', 10, -110.01, -117.995, '[40,40]', '', '', '', '', '', '', '', '[40,45,45,40]', '', '[{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"IMS\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"NSSF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"UPF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"PCF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"SMF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"AMF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"UDM\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"AUSF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"NRF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"LMF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"NEF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"MME\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"N3IWF\",\"itemType\":\"node\"}]', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"grab\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"fill\":\"#318c7d\",\"fillOpacity\":0.1,\"height\":402.691157,\"highlight\":{\"fill\":\"rgb(253, 253, 253)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(253, 253, 253)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"lineWidth\":1,\"r\":201.3455785,\"radius\":2,\"selected\":{\"fill\":\"rgb(253, 253, 253)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\",\"width\":345.628003}', 'Core Network', '{\"position\":\"top\",\"refX\":10,\"refY\":10,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2304, 'node', '5GC System Architecture3', 'Base', 'image-animate-state', 0, -371.671, -129.664, '[64,64]', '{\"height\":25,\"img\":\"\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/base.svg', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#ffffff\"}', '(R)AN', '{\"offset\":-4,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2305, 'node', '5GC System Architecture3', 'DN', 'image-animate-state', 0, 325.54, -71.38, '[80,80]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/earth3d-1.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#ffffff\"}', 'DN', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2306, 'node', '5GC System Architecture3', 'OMC', 'image-animate-state', 0, 327.254, -266.76, '[64,64]', '{\"height\":25,\"img\":\"\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/omc6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#783636\"}', 'OMC', '{\"offset\":4,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2307, 'node', '5GC System Architecture3', 'IMS', 'image-animate-state', 24, 40.3237, -119.48, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/ims6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f1212c\"}', 'IMS', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2308, 'node', '5GC System Architecture3', 'NSSF', 'image-animate-state', 23, 49.2396, -291.854, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/nssf6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'NSSF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2309, 'node', '5GC System Architecture3', 'UPF', 'image-animate-state', 22, -31.0923, -18.3086, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/upf6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'UPF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2310, 'node', '5GC System Architecture3', 'UE', 'image', 14, -366.589, 0.378, '[64,64]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/mobile.svg', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'UE', '{\"offset\":-10,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2311, 'node', '5GC System Architecture3', 'PCF', 'image-animate-state', 21, 114.148, -293.478, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/pcf6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'PCF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2312, 'node', '5GC System Architecture3', 'SMF', 'image-animate-state', 20, -28.5624, -116.024, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/smf6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f0212c\"}', 'SMF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2313, 'node', '5GC System Architecture3', 'AMF', 'image-animate-state', 19, -166.037, -115.898, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/amf6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'AMF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2314, 'node', '5GC System Architecture3', 'UDM', 'image-animate-state', 18, -21.8787, -293.295, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/udm6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'UDM', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2315, 'node', '5GC System Architecture3', 'AUSF', 'image-animate-state', 17, -89.9143, -291.872, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/ausf6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'AUSF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2316, 'node', '5GC System Architecture3', 'NRF', 'image-animate-state', 16, 107.349, -117.955, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/nrf6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'NRF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2317, 'node', '5GC System Architecture3', 'LMF', 'image-animate-state', 15, 178.417, -292.559, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/lmf.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'LMF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2318, 'node', '5GC System Architecture3', 'NEF', 'image-animate-state', 14, -89.82, -113.764, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/nef6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'NEF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2319, 'node', '5GC System Architecture3', 'MME', 'image-animate-state', 13, -169.465, -291.82, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/mme6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'MME', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2320, 'node', '5GC System Architecture3', 'N3IWF', 'image-animate-state', 12, 178.037, -121.058, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/n3iwf6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'N3IWF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2321, 'node', '5GC System Architecture3', 'lan', 'image-animate-state', 11, 10, -193, '[300,30]', '{\"height\":25,\"img\":\"\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/router3d-3.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#fafafa\"}', 'Router', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#2e0b7f\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2322, 'edge', '5GC System Architecture3', 'RAN~1704534829539~UPF', 'cubic-animate-line-dash', 0, 0, 0, '', '', '', '', '', 'Base', 'UPF', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":4,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'N3', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":-15,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2323, 'edge', '5GC System Architecture3', 'DN~1704534869360~UPF', 'cubic-animate-line-dash', 0, 0, 0, '', '', '', '', '', 'UPF', 'DN', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":4,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'N6', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":-8,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2324, 'edge', '5GC System Architecture3', 'OMC~1704535021073~5GC', 'line-animate-state', 0, 0, 0, '', '', '', '', '', 'OMC', '5GC', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2325, 'edge', '5GC System Architecture3', 'SMF~1704765447548~UPF', 'line', 0, 0, 0, '', '', '', '', '', 'SMF', 'UPF', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'N4', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":5,\"refY\":-4,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2326, 'edge', '5GC System Architecture3', '5GC~1704764825481~Base', 'cubic-animate-circle-move', 0, 0, 0, '', '', '', '', '', 'Base', 'AMF', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'N2', '{\"autoRotate\":false,\"position\":\"end\",\"refX\":-10,\"refY\":6,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2327, 'edge', '5GC System Architecture3', 'UE~1704534736553~AMF', 'cubic-animate-circle-move', 0, 0, 0, '', '', '', '', '', 'UE', 'Base', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2328, 'edge', '5GC System Architecture3', 'IMS~1706170983368~lan', 'line', 0, 0, 0, '', '', '', '', '', 'IMS', 'lan', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2329, 'edge', '5GC System Architecture3', 'NSSF~1706171150530~lan', 'line', 0, 0, 0, '', '', '', '', '', 'NSSF', 'lan', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2330, 'edge', '5GC System Architecture3', 'PCF~1706171215279~lan', 'line', 0, 0, 0, '', '', '', '', '', 'PCF', 'lan', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2331, 'edge', '5GC System Architecture3', 'AMF~1706171248818~lan', 'line', 0, 0, 0, '', '', '', '', '', 'AMF', 'lan', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2332, 'edge', '5GC System Architecture3', 'AUSF~1706171282723~lan', 'line', 0, 0, 0, '', '', '', '', '', 'AUSF', 'lan', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2333, 'edge', '5GC System Architecture3', 'MME~1706173575994~lan', 'line', 0, 0, 0, '', '', '', '', '', 'MME', 'lan', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2334, 'edge', '5GC System Architecture3', 'NEF~1706173617894~lan', 'line', 0, 0, 0, '', '', '', '', '', 'NEF', 'lan', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2335, 'edge', '5GC System Architecture3', 'SMF~1706173671962~lan', 'line', 0, 0, 0, '', '', '', '', '', 'SMF', 'lan', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2336, 'edge', '5GC System Architecture3', 'UDM~1706173695080~lan', 'line', 0, 0, 0, '', '', '', '', '', 'UDM', 'lan', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2337, 'edge', '5GC System Architecture3', 'NRF~1706173798165~lan', 'line', 0, 0, 0, '', '', '', '', '', 'NRF', 'lan', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2338, 'edge', '5GC System Architecture3', 'N3IWF~1706173823374~lan', 'line', 0, 0, 0, '', '', '', '', '', 'N3IWF', 'lan', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2339, 'edge', '5GC System Architecture3', 'LMF~1706173845506~lan', 'line', 0, 0, 0, '', '', '', '', '', 'LMF', 'lan', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2340, 'edge', '5GC System Architecture3', 'Base~1706176128676~MME', 'cubic-animate-circle-move', 0, 0, 0, '', '', '', '', '', 'Base', 'MME', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'S1-MME', '{\"autoRotate\":false,\"position\":\"end\",\"refX\":-15,\"refY\":-35,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (2341, 'combo', '5GC System Architecture3', '5GC', 'rect', 10, 4.47597, -155.893, '[40,40]', '', '', '', '', '', '', '', '[40,40,40,40]', '', '[{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"IMS\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"NSSF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"UPF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"PCF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"SMF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"AMF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"UDM\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"AUSF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"NRF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"LMF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"NEF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"MME\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"N3IWF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"lan\",\"itemType\":\"node\"}]', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"grab\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"fill\":\"#318c7d\",\"fillOpacity\":0.1,\"height\":325.169599,\"highlight\":{\"fill\":\"rgb(253, 253, 253)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(253, 253, 253)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"lineWidth\":1,\"r\":203.94142,\"radius\":2,\"selected\":{\"fill\":\"rgb(253, 253, 253)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\",\"width\":407.88284}', 'Core Network', '{\"position\":\"top\",\"refX\":10,\"refY\":10,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4278, 'node', '5GC System Architecture5', 'Base', 'image-animate-state', 0, -110, -30, '[60,50]', '{\"height\":25,\"img\":\"\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/base.svg', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#ffffff\"}', '(R)AN', '{\"offset\":-5,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4279, 'node', '5GC System Architecture5', 'DN', 'image-animate-state', 0, 240, -30, '[60,60]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/earth3d-1.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#ffffff\"}', 'DN', '{\"offset\":-5,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4280, 'node', '5GC System Architecture5', 'OMC', 'image-animate-state', 0, 240, -330, '[60,60]', '{\"height\":25,\"img\":\"\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/omc62.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#783636\"}', 'OMC', '{\"offset\":-15,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4281, 'node', '5GC System Architecture5', 'NR', 'image', 0, -153, -27, '[30,30]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/lightning1.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#ffffff\"}', '', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#000000\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4282, 'node', '5GC System Architecture5', 'IMS', 'image-animate-state', 11, 170, -130, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/ims62.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f1212c\"}', 'IMS', '{\"offset\":-15,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4283, 'node', '5GC System Architecture5', 'NSSF', 'image-animate-state', 12, -110, -260, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/nssf62.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'NSSF', '{\"offset\":-15,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4284, 'node', '5GC System Architecture5', 'UPF', 'image-animate-state', 13, 30, -30, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/upf6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'UPF', '{\"offset\":-5,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4285, 'node', '5GC System Architecture5', 'PCF', 'image-animate-state', 14, 100, -260, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/pcf62.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'PCF', '{\"offset\":-15,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4286, 'node', '5GC System Architecture5', 'UE', 'image', 14, -201.589, -29.622, '[64,64]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/mobile.svg', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'UE', '{\"offset\":-10,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4287, 'node', '5GC System Architecture5', 'SMF', 'image-animate-state', 15, 30, -130, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/smf62.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f0212c\"}', 'SMF', '{\"offset\":-15,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4288, 'node', '5GC System Architecture5', 'AMF', 'image-animate-state', 16, -110, -130, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/amf62.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'AMF', '{\"offset\":-15,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4289, 'node', '5GC System Architecture5', 'AUSF', 'image-animate-state', 16, -180, -260, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/ausf62.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'AUSF', '{\"offset\":-15,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4290, 'node', '5GC System Architecture5', 'UDM', 'image-animate-state', 17, -40, -260, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/udm62.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'UDM', '{\"offset\":-15,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4291, 'node', '5GC System Architecture5', 'NRF', 'image-animate-state', 19, 100, -130, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/nrf62.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'NRF', '{\"offset\":-15,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4292, 'node', '5GC System Architecture5', 'LMF', 'image-animate-state', 20, 170, -260, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/lmf62.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'LMF', '{\"offset\":-15,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4293, 'node', '5GC System Architecture5', 'NEF', 'image-animate-state', 21, 30, -260, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/nef62.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'NEF', '{\"offset\":-15,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4294, 'node', '5GC System Architecture5', 'MME', 'image-animate-state', 22, -180, -130, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/mme62.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'MME', '{\"offset\":-15,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4295, 'node', '5GC System Architecture5', 'N3IWF', 'image-animate-state', 23, -40, -130, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/n3iwf62.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'N3IWF', '{\"offset\":-15,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4296, 'node', '5GC System Architecture5', 'lan1', 'image', 24, -180, -195, '[70,10]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/lan2.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#ffffff\"}', 'LAN', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#f6f4f4\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4297, 'node', '5GC System Architecture5', 'lan2', 'image', 24, -110, -195, '[70,10]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/lan2.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'LAN', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#f8f7f7\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4298, 'node', '5GC System Architecture5', 'lan3', 'image', 24, -40, -195, '[70,10]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/lan2.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#ffffff\"}', 'LAN', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4299, 'node', '5GC System Architecture5', 'lan4', 'image', 24, 30, -195, '[70,10]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/lan2.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#ffffff\"}', 'LAN', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4300, 'node', '5GC System Architecture5', 'lan5', 'image', 24, 100, -195, '[70,10]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/lan2.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#ffffff\"}', 'LAN', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4301, 'node', '5GC System Architecture5', 'lan6', 'image', 24, 170, -195, '[70,10]', '{\"height\":25,\"img\":\"\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/lan2.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#ffffff\"}', 'LAN', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4302, 'node', '5GC System Architecture5', 'lan7', 'image', 24, 240, -195, '[70,10]', '{\"height\":25,\"img\":\"\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/lan2.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#ffffff\"}', 'LAN', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4303, 'node', '5GC System Architecture5', 'LAN', 'rect', 30, 30, -195, '[500,10]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"#87cefa\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#87cefa\"}', '', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#000000\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4304, 'edge', '5GC System Architecture5', 'NEF~1706494552592~lan5', 'line', 0, 0, 0, '', '', '', '', '', 'NEF', 'lan4', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4305, 'edge', '5GC System Architecture5', 'LMF~1706495015507~lan6', 'polyline', 0, 0, 0, '', '', '', '', '', 'LMF', 'lan6', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4306, 'edge', '5GC System Architecture5', 'OMC~1706495150020~lan7', 'polyline', 0, 0, 0, '', '', '', '', '', 'OMC', 'lan7', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4307, 'edge', '5GC System Architecture5', 'AUSF~1706495243932~lan1', 'polyline', 0, 0, 0, '', '', '', '', '', 'AUSF', 'lan1', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4308, 'edge', '5GC System Architecture5', 'AMF~1706495271064~lan2', 'polyline', 0, 0, 0, '', '', '', '', '', 'AMF', 'lan2', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4309, 'edge', '5GC System Architecture5', 'NRF~1706495715971~lan3', 'polyline', 0, 0, 0, '', '', '', '', '', 'NRF', 'lan5', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4310, 'edge', '5GC System Architecture5', 'SMF~1706495739277~lan4', 'polyline', 0, 0, 0, '', '', '', '', '', 'SMF', 'lan4', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4311, 'edge', '5GC System Architecture5', 'IMS~1706496047466~lan5', 'polyline', 0, 0, 0, '', '', '', '', '', 'IMS', 'lan6', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4312, 'edge', '5GC System Architecture5', 'N3IWF~1706496082968~lan6', 'polyline', 0, 0, 0, '', '', '', '', '', 'N3IWF', 'lan3', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4313, 'edge', '5GC System Architecture5', 'RAN~1704534829539~UPF', 'line-animate-state', 0, 0, 0, '', '', '', '', '', 'Base', 'UPF', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":5,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#7b68ee\"}', 'N3', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":-10,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4314, 'edge', '5GC System Architecture5', 'DN~1704534869360~UPF', 'line-animate-state', 0, 0, 0, '', '', '', '', '', 'UPF', 'DN', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":5,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#7b68ee\"}', 'N6', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":-10,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4315, 'edge', '5GC System Architecture5', 'SMF~1704765447548~UPF', 'line-animate-state', 0, 0, 0, '', '', '', '', '', 'SMF', 'UPF', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'N4', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":3,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4316, 'edge', '5GC System Architecture5', '5GC~1704764825481~Base', 'line-animate-state', 0, 0, 0, '', '', '', '', '', 'Base', 'AMF', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'N2', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":-5,\"refY\":-2,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4317, 'edge', '5GC System Architecture5', 'MME~1706492758830~lan1', 'polyline', 0, 0, 0, '', '', '', '', '', 'MME', 'lan1', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4318, 'edge', '5GC System Architecture5', 'UDM~1706493787944~lan2', 'line', 0, 0, 0, '', '', '', '', '', 'UDM', 'lan3', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4319, 'edge', '5GC System Architecture5', 'PCF~1706494120334~lan3', 'line', 0, 0, 0, '', '', '', '', '', 'PCF', 'lan5', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); -INSERT INTO `chart_graph` VALUES (4320, 'edge', '5GC System Architecture5', 'NSSF~1706494145341~lan4', 'polyline', 0, 0, 0, '', '', '', '', '', 'NSSF', 'lan2', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1, 'node', 'hello', 'node-1', 'rect', 0, -218, -20, '[80,40]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"#ff0000\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ff0000\"}', 'Node-1', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2, 'node', 'hello', 'node-2', 'star', 0, 82, -15, '60', '{\"height\":25,\"img\":\"\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"#2bff00\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#05ff16\"}', 'Node-2', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (3, 'edge', 'hello', 'node-1~1704427926706~node-2', 'polyline', 0, 0, 0, '', '', '', '', '', 'node-1', 'node-2', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"endArrow\":true,\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":5,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#0062ff\"}', '1 to 2', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1177, 'node', 'demo', 'one', 'circle-animate-shape-r', 0, -123.911, 5, '60', '{\"height\":25,\"img\":\"\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"#00ff91\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ff4d4d\"}', 'One', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1178, 'node', 'demo', 'two', 'circle-animate-shape-stroke', 0, 228.652, 10.3481, '60', '{\"height\":25,\"img\":\"\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"#fe5a01\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#9497ff\"}', 'Two', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1179, 'node', 'demo', 'three', 'rect-animate-state', 0, 65, 127, '[80,40]', '{\"height\":25,\"img\":\"\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"#ffffff\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'Three', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#000000\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1180, 'edge', 'demo', 'one~1704764271132~two', 'cubic-animate-line-dash', 0, 0, 0, '', '', '', '', '', 'one', 'two', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"endArrow\":true,\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":1,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#fbfe39\"}', 'one-two', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1181, 'edge', 'demo', 'two~1704764297866~three', 'cubic-animate-circle-move', 0, 0, 0, '', '', '', '', '', 'two', 'three', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":1,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#80f0ff\"}', 'two-three', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1182, 'edge', 'demo', 'three~1704764353721~one', 'line-animate-state', 0, 0, 0, '', '', '', '', '', 'three', 'one', '', '', '', '', '{\"cursor\":\"pointer\",\"lineWidth\":1,\"offset\":20,\"radius\":2,\"stroke\":\"#ffffff\"}', 'three-one', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1725, 'node', '5GC System Architecture', 'Base', 'image-animate-state', 0, -530.671, -66.6639, '[64,64]', '{\"height\":25,\"img\":\"\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/base.svg', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#ffffff\"}', '(R)AN', '{\"offset\":4,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1726, 'node', '5GC System Architecture', 'DN', 'image-animate-state', 0, -529.46, 62.62, '[64,64]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/cloud.svg', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#ffffff\"}', 'DN', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1727, 'node', '5GC System Architecture', 'OMC', 'image-animate-state', 0, -527.746, -346.76, '[64,64]', '{\"height\":25,\"img\":\"\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/service_db.svg', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#783636\"}', 'OMC', '{\"offset\":4,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1728, 'node', '5GC System Architecture', 'IMS', 'rect-animate-state', 23, 22.4671, -231.155, '[80,40]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"#f5222d\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f1212c\"}', 'IMS', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1729, 'node', '5GC System Architecture', 'NSSF', 'rect-animate-state', 22, -116.316, -335.56, '[80,40]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"#f5222d\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'NSSF', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1730, 'node', '5GC System Architecture', 'UPF', 'rect-animate-state', 21, -268.005, -52.6272, '[80,40]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"#f5222d\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'UPF', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1731, 'node', '5GC System Architecture', 'UE', 'image', 14, -532.589, -231.622, '[64,64]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/mobile.svg', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'UE', '{\"offset\":4,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1732, 'node', '5GC System Architecture', 'PCF', 'rect-animate-state', 20, -267.905, -152.894, '[80,40]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"#f5222d\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'PCF', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1733, 'node', '5GC System Architecture', 'SMF', 'rect-animate-state', 19, -117.66, -53.1161, '[80,40]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"#f5222d\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f0212c\"}', 'SMF', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1734, 'node', '5GC System Architecture', 'AMF', 'rect-animate-state', 18, -268.316, -235.06, '[80,40]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"#f5222d\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'AMF', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1735, 'node', '5GC System Architecture', 'UDM', 'rect-animate-state', 17, 19.8172, -333.371, '[80,40]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"#f5222d\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'UDM', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1736, 'node', '5GC System Architecture', 'AUSF', 'rect-animate-state', 16, -269.316, -335.56, '[80,40]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"#f5222d\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'AUSF', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1737, 'node', '5GC System Architecture', 'NRF', 'rect', 15, 26.4865, -150.732, '[80,40]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '5GC', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"#f5222d\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#f5222d\"}', 'NRF', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1738, 'node', '5GC System Architecture', 'LMF', 'rect', 14, -266.158, 48.8341, '[80,40]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '5GC', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"#f5222d\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#f5222d\"}', 'LMF', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1739, 'node', '5GC System Architecture', 'NEF', 'rect', 13, -120.613, -149.621, '[80,40]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"#f5222d\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'NEF', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1740, 'node', '5GC System Architecture', 'MME', 'rect', 12, -118.002, -233.655, '[80,40]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '5GC', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"#f5222d\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#f5222d\"}', 'MME', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1741, 'node', '5GC System Architecture', 'N3IWF', 'rect', 11, 20.4198, -58.2659, '[80,40]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '5GC', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"#f5222d\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#f5222d\"}', 'N3IWF', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1742, 'edge', '5GC System Architecture', '5GC~1704764825481~Base', 'cubic-animate-line-dash', 0, 0, 0, '', '', '', '', '', 'Base', '5GC', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":1,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'N2', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1743, 'edge', '5GC System Architecture', 'UE~1704534736553~AMF', 'cubic-animate-line-dash', 0, 0, 0, '', '', '', '', '', 'UE', 'Base', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":1,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1744, 'edge', '5GC System Architecture', 'RAN~1704534829539~UPF', 'line-animate-state', 0, 0, 0, '', '', '', '', '', 'Base', 'UPF', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":1,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'N3', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1745, 'edge', '5GC System Architecture', 'DN~1704534869360~UPF', 'cubic-animate-line-dash', 0, 0, 0, '', '', '', '', '', 'DN', 'UPF', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":1,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'N6', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1746, 'edge', '5GC System Architecture', 'OMC~1704535021073~5GC', 'line-animate-state', 0, 0, 0, '', '', '', '', '', 'OMC', '5GC', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":1,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1747, 'edge', '5GC System Architecture', 'SMF~1704765447548~UPF', 'line', 0, 0, 0, '', '', '', '', '', 'SMF', 'UPF', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":1,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'N4', '{\"autoRotate\":true,\"position\":\"end\",\"refX\":-12,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1748, 'combo', '5GC System Architecture', '5GC', 'rect', 10, -121.415, -143.363, '[40,40]', '', '', '', '', '', '', '', '[40,45,40,45]', '', '[{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"IMS\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"NSSF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"UPF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"PCF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"SMF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"AMF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"UDM\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"AUSF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"NRF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"LMF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"NEF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"MME\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"N3IWF\",\"itemType\":\"node\"}]', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"grab\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"fill\":\"#ffffff\",\"fillOpacity\":0.1,\"height\":425.39430000000004,\"highlight\":{\"fill\":\"rgb(253, 253, 253)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(253, 253, 253)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"lineWidth\":1,\"r\":212.69715000000002,\"radius\":2,\"selected\":{\"fill\":\"rgb(253, 253, 253)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\",\"width\":376.8029}', 'Core Network', '{\"position\":\"top\",\"refX\":10,\"refY\":10,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1869, 'node', '5GC System Architecture2', 'Base', 'image-animate-state', 0, -530.671, -66.6639, '[64,64]', '{\"height\":25,\"img\":\"\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/base.svg', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#ffffff\"}', '(R)AN', '{\"offset\":4,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1870, 'node', '5GC System Architecture2', 'DN', 'image-animate-state', 0, -544.46, 45.62, '[60,60]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/cloud6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#ffffff\"}', 'DN', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1871, 'node', '5GC System Architecture2', 'OMC', 'image-animate-state', 0, -531.746, -291.76, '[64,64]', '{\"height\":25,\"img\":\"\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/omc6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#783636\"}', 'OMC', '{\"offset\":4,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1872, 'node', '5GC System Architecture2', 'IMS', 'image-animate-state', 23, 32.8038, -208.015, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/ims6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f1212c\"}', 'IMS', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1873, 'node', '5GC System Architecture2', 'NSSF', 'image-animate-state', 22, -103.637, -294.34, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/nssf6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'NSSF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1874, 'node', '5GC System Architecture2', 'UPF', 'image-animate-state', 21, -251.745, -30.487, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/upf6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'UPF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1875, 'node', '5GC System Architecture2', 'UE', 'image', 14, -535.589, -178.622, '[64,64]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/mobile.svg', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'UE', '{\"offset\":4,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1876, 'node', '5GC System Architecture2', 'PCF', 'image-animate-state', 20, -251.569, -121.754, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/pcf6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'PCF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1877, 'node', '5GC System Architecture2', 'SMF', 'image-animate-state', 19, -102.324, -30.9759, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/smf6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f0212c\"}', 'SMF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1878, 'node', '5GC System Architecture2', 'AMF', 'image-animate-state', 18, -252.824, -212.92, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/amf6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'AMF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1879, 'node', '5GC System Architecture2', 'UDM', 'image-animate-state', 17, 30.371, -283.065, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/udm6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'UDM', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1880, 'node', '5GC System Architecture2', 'AUSF', 'image-animate-state', 16, -248.56, -291.872, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/ausf6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'AUSF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1881, 'node', '5GC System Architecture2', 'NRF', 'image-animate-state', 15, 31.0121, -130.814, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/nrf6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'NRF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1882, 'node', '5GC System Architecture2', 'LMF', 'image-animate-state', 14, -247.573, 58.3507, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/lmf.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'LMF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1883, 'node', '5GC System Architecture2', 'NEF', 'image-animate-state', 13, -102.277, -127.481, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/nef6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'NEF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1884, 'node', '5GC System Architecture2', 'MME', 'image-animate-state', 12, -102.666, -211.515, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/mme6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'MME', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1885, 'node', '5GC System Architecture2', 'N3IWF', 'image-animate-state', 11, 32.0232, -36.1257, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/n3iwf61.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'N3IWF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1886, 'edge', '5GC System Architecture2', 'RAN~1704534829539~UPF', 'line-animate-state', 0, 0, 0, '', '', '', '', '', 'Base', 'UPF', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":1,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'N3', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1887, 'edge', '5GC System Architecture2', 'DN~1704534869360~UPF', 'cubic-animate-line-dash', 0, 0, 0, '', '', '', '', '', 'DN', 'UPF', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":1,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'N6', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1888, 'edge', '5GC System Architecture2', 'OMC~1704535021073~5GC', 'line-animate-state', 0, 0, 0, '', '', '', '', '', 'OMC', '5GC', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":1,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1889, 'edge', '5GC System Architecture2', 'SMF~1704765447548~UPF', 'line', 0, 0, 0, '', '', '', '', '', 'SMF', 'UPF', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":1,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'N4', '{\"autoRotate\":true,\"position\":\"end\",\"refX\":-12,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1890, 'edge', '5GC System Architecture2', '5GC~1704764825481~Base', 'cubic-animate-line-dash', 0, 0, 0, '', '', '', '', '', 'Base', '5GC', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":1,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'N2', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1891, 'edge', '5GC System Architecture2', 'UE~1704534736553~AMF', 'cubic-animate-line-dash', 0, 0, 0, '', '', '', '', '', 'UE', 'Base', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":1,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (1892, 'combo', '5GC System Architecture2', '5GC', 'rect', 10, -110.01, -117.995, '[40,40]', '', '', '', '', '', '', '', '[40,45,45,40]', '', '[{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"IMS\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"NSSF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"UPF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"PCF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"SMF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"AMF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"UDM\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"AUSF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"NRF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"LMF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"NEF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"MME\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"N3IWF\",\"itemType\":\"node\"}]', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"grab\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"fill\":\"#318c7d\",\"fillOpacity\":0.1,\"height\":402.691157,\"highlight\":{\"fill\":\"rgb(253, 253, 253)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(253, 253, 253)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"lineWidth\":1,\"r\":201.3455785,\"radius\":2,\"selected\":{\"fill\":\"rgb(253, 253, 253)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\",\"width\":345.628003}', 'Core Network', '{\"position\":\"top\",\"refX\":10,\"refY\":10,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2304, 'node', '5GC System Architecture3', 'Base', 'image-animate-state', 0, -371.671, -129.664, '[64,64]', '{\"height\":25,\"img\":\"\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/base.svg', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#ffffff\"}', '(R)AN', '{\"offset\":-4,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2305, 'node', '5GC System Architecture3', 'DN', 'image-animate-state', 0, 325.54, -71.38, '[80,80]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/earth3d-1.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#ffffff\"}', 'DN', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2306, 'node', '5GC System Architecture3', 'OMC', 'image-animate-state', 0, 327.254, -266.76, '[64,64]', '{\"height\":25,\"img\":\"\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/omc6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#783636\"}', 'OMC', '{\"offset\":4,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2307, 'node', '5GC System Architecture3', 'IMS', 'image-animate-state', 24, 40.3237, -119.48, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/ims6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f1212c\"}', 'IMS', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2308, 'node', '5GC System Architecture3', 'NSSF', 'image-animate-state', 23, 49.2396, -291.854, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/nssf6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'NSSF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2309, 'node', '5GC System Architecture3', 'UPF', 'image-animate-state', 22, -31.0923, -18.3086, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/upf6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'UPF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2310, 'node', '5GC System Architecture3', 'UE', 'image', 14, -366.589, 0.378, '[64,64]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/mobile.svg', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'UE', '{\"offset\":-10,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2311, 'node', '5GC System Architecture3', 'PCF', 'image-animate-state', 21, 114.148, -293.478, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/pcf6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'PCF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2312, 'node', '5GC System Architecture3', 'SMF', 'image-animate-state', 20, -28.5624, -116.024, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/smf6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f0212c\"}', 'SMF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2313, 'node', '5GC System Architecture3', 'AMF', 'image-animate-state', 19, -166.037, -115.898, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/amf6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'AMF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2314, 'node', '5GC System Architecture3', 'UDM', 'image-animate-state', 18, -21.8787, -293.295, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/udm6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'UDM', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2315, 'node', '5GC System Architecture3', 'AUSF', 'image-animate-state', 17, -89.9143, -291.872, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/ausf6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'AUSF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2316, 'node', '5GC System Architecture3', 'NRF', 'image-animate-state', 16, 107.349, -117.955, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/nrf6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'NRF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2317, 'node', '5GC System Architecture3', 'LMF', 'image-animate-state', 15, 178.417, -292.559, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/lmf.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'LMF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2318, 'node', '5GC System Architecture3', 'NEF', 'image-animate-state', 14, -89.82, -113.764, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/nef6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'NEF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2319, 'node', '5GC System Architecture3', 'MME', 'image-animate-state', 13, -169.465, -291.82, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/mme6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'MME', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2320, 'node', '5GC System Architecture3', 'N3IWF', 'image-animate-state', 12, 178.037, -121.058, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/n3iwf6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'N3IWF', '{\"offset\":0,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2321, 'node', '5GC System Architecture3', 'lan', 'image-animate-state', 11, 10, -193, '[300,30]', '{\"height\":25,\"img\":\"\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/router3d-3.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '5GC', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#fafafa\"}', 'Router', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#2e0b7f\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2322, 'edge', '5GC System Architecture3', 'RAN~1704534829539~UPF', 'cubic-animate-line-dash', 0, 0, 0, '', '', '', '', '', 'Base', 'UPF', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":4,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'N3', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":-15,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2323, 'edge', '5GC System Architecture3', 'DN~1704534869360~UPF', 'cubic-animate-line-dash', 0, 0, 0, '', '', '', '', '', 'UPF', 'DN', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":4,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'N6', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":-8,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2324, 'edge', '5GC System Architecture3', 'OMC~1704535021073~5GC', 'line-animate-state', 0, 0, 0, '', '', '', '', '', 'OMC', '5GC', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2325, 'edge', '5GC System Architecture3', 'SMF~1704765447548~UPF', 'line', 0, 0, 0, '', '', '', '', '', 'SMF', 'UPF', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'N4', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":5,\"refY\":-4,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2326, 'edge', '5GC System Architecture3', '5GC~1704764825481~Base', 'cubic-animate-circle-move', 0, 0, 0, '', '', '', '', '', 'Base', 'AMF', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'N2', '{\"autoRotate\":false,\"position\":\"end\",\"refX\":-10,\"refY\":6,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2327, 'edge', '5GC System Architecture3', 'UE~1704534736553~AMF', 'cubic-animate-circle-move', 0, 0, 0, '', '', '', '', '', 'UE', 'Base', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2328, 'edge', '5GC System Architecture3', 'IMS~1706170983368~lan', 'line', 0, 0, 0, '', '', '', '', '', 'IMS', 'lan', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2329, 'edge', '5GC System Architecture3', 'NSSF~1706171150530~lan', 'line', 0, 0, 0, '', '', '', '', '', 'NSSF', 'lan', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2330, 'edge', '5GC System Architecture3', 'PCF~1706171215279~lan', 'line', 0, 0, 0, '', '', '', '', '', 'PCF', 'lan', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2331, 'edge', '5GC System Architecture3', 'AMF~1706171248818~lan', 'line', 0, 0, 0, '', '', '', '', '', 'AMF', 'lan', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2332, 'edge', '5GC System Architecture3', 'AUSF~1706171282723~lan', 'line', 0, 0, 0, '', '', '', '', '', 'AUSF', 'lan', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2333, 'edge', '5GC System Architecture3', 'MME~1706173575994~lan', 'line', 0, 0, 0, '', '', '', '', '', 'MME', 'lan', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2334, 'edge', '5GC System Architecture3', 'NEF~1706173617894~lan', 'line', 0, 0, 0, '', '', '', '', '', 'NEF', 'lan', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2335, 'edge', '5GC System Architecture3', 'SMF~1706173671962~lan', 'line', 0, 0, 0, '', '', '', '', '', 'SMF', 'lan', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2336, 'edge', '5GC System Architecture3', 'UDM~1706173695080~lan', 'line', 0, 0, 0, '', '', '', '', '', 'UDM', 'lan', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2337, 'edge', '5GC System Architecture3', 'NRF~1706173798165~lan', 'line', 0, 0, 0, '', '', '', '', '', 'NRF', 'lan', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2338, 'edge', '5GC System Architecture3', 'N3IWF~1706173823374~lan', 'line', 0, 0, 0, '', '', '', '', '', 'N3IWF', 'lan', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2339, 'edge', '5GC System Architecture3', 'LMF~1706173845506~lan', 'line', 0, 0, 0, '', '', '', '', '', 'LMF', 'lan', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2340, 'edge', '5GC System Architecture3', 'Base~1706176128676~MME', 'cubic-animate-circle-move', 0, 0, 0, '', '', '', '', '', 'Base', 'MME', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'S1-MME', '{\"autoRotate\":false,\"position\":\"end\",\"refX\":-15,\"refY\":-35,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (2341, 'combo', '5GC System Architecture3', '5GC', 'rect', 10, 4.47597, -155.893, '[40,40]', '', '', '', '', '', '', '', '[40,40,40,40]', '', '[{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"IMS\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"NSSF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"UPF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"PCF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"SMF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"AMF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"UDM\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"AUSF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"NRF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"LMF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"NEF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"MME\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"N3IWF\",\"itemType\":\"node\"},{\"comboId\":\"5GC\",\"depth\":12,\"id\":\"lan\",\"itemType\":\"node\"}]', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"grab\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"fill\":\"#318c7d\",\"fillOpacity\":0.1,\"height\":325.169599,\"highlight\":{\"fill\":\"rgb(253, 253, 253)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(253, 253, 253)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"lineWidth\":1,\"r\":203.94142,\"radius\":2,\"selected\":{\"fill\":\"rgb(253, 253, 253)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\",\"width\":407.88284}', 'Core Network', '{\"position\":\"top\",\"refX\":10,\"refY\":10,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4278, 'node', '5GC System Architecture5', 'Base', 'image-animate-state', 0, -110, -30, '[60,50]', '{\"height\":25,\"img\":\"\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/base.svg', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#ffffff\"}', '(R)AN', '{\"offset\":-5,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4279, 'node', '5GC System Architecture5', 'DN', 'image-animate-state', 0, 240, -30, '[60,60]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/earth3d-1.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#ffffff\"}', 'DN', '{\"offset\":-5,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4280, 'node', '5GC System Architecture5', 'OMC', 'image-animate-state', 0, 240, -330, '[60,60]', '{\"height\":25,\"img\":\"\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/omc62.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#783636\"}', 'OMC', '{\"offset\":-15,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4281, 'node', '5GC System Architecture5', 'NR', 'image', 0, -153, -27, '[30,30]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/lightning1.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#ffffff\"}', '', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#000000\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4282, 'node', '5GC System Architecture5', 'IMS', 'image-animate-state', 11, 170, -130, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/ims62.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f1212c\"}', 'IMS', '{\"offset\":-15,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4283, 'node', '5GC System Architecture5', 'NSSF', 'image-animate-state', 12, -110, -260, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/nssf62.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'NSSF', '{\"offset\":-15,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4284, 'node', '5GC System Architecture5', 'UPF', 'image-animate-state', 13, 30, -30, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/upf6.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'UPF', '{\"offset\":-5,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4285, 'node', '5GC System Architecture5', 'PCF', 'image-animate-state', 14, 100, -260, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/pcf62.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'PCF', '{\"offset\":-15,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4286, 'node', '5GC System Architecture5', 'UE', 'image', 14, -201.589, -29.622, '[64,64]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/mobile.svg', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'UE', '{\"offset\":-10,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4287, 'node', '5GC System Architecture5', 'SMF', 'image-animate-state', 15, 30, -130, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/smf62.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f0212c\"}', 'SMF', '{\"offset\":-15,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4288, 'node', '5GC System Architecture5', 'AMF', 'image-animate-state', 16, -110, -130, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/amf62.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'AMF', '{\"offset\":-15,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4289, 'node', '5GC System Architecture5', 'AUSF', 'image-animate-state', 16, -180, -260, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/ausf62.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'AUSF', '{\"offset\":-15,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4290, 'node', '5GC System Architecture5', 'UDM', 'image-animate-state', 17, -40, -260, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/udm62.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'UDM', '{\"offset\":-15,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4291, 'node', '5GC System Architecture5', 'NRF', 'image-animate-state', 19, 100, -130, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/nrf62.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'NRF', '{\"offset\":-15,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4292, 'node', '5GC System Architecture5', 'LMF', 'image-animate-state', 20, 170, -260, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/lmf62.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'LMF', '{\"offset\":-15,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4293, 'node', '5GC System Architecture5', 'NEF', 'image-animate-state', 21, 30, -260, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/nef62.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'NEF', '{\"offset\":-15,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4294, 'node', '5GC System Architecture5', 'MME', 'image-animate-state', 22, -180, -130, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/mme62.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'MME', '{\"offset\":-15,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4295, 'node', '5GC System Architecture5', 'N3IWF', 'image-animate-state', 23, -40, -130, '[60,50]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/n3iwf62.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#f5222d\"}', 'N3IWF', '{\"offset\":-15,\"position\":\"bottom\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":14,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4296, 'node', '5GC System Architecture5', 'lan1', 'image', 24, -180, -195, '[70,10]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/lan2.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#ffffff\"}', 'LAN', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#f6f4f4\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4297, 'node', '5GC System Architecture5', 'lan2', 'image', 24, -110, -195, '[70,10]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/lan2.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"transparent\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'LAN', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#f8f7f7\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4298, 'node', '5GC System Architecture5', 'lan3', 'image', 24, -40, -195, '[70,10]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/lan2.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#ffffff\"}', 'LAN', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4299, 'node', '5GC System Architecture5', 'lan4', 'image', 24, 30, -195, '[70,10]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/lan2.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#ffffff\"}', 'LAN', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4300, 'node', '5GC System Architecture5', 'lan5', 'image', 24, 100, -195, '[70,10]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/lan2.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#ffffff\"}', 'LAN', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4301, 'node', '5GC System Architecture5', 'lan6', 'image', 24, 170, -195, '[70,10]', '{\"height\":25,\"img\":\"\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/lan2.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#ffffff\"}', 'LAN', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4302, 'node', '5GC System Architecture5', 'lan7', 'image', 24, 240, -195, '[70,10]', '{\"height\":25,\"img\":\"\",\"offset\":20,\"show\":false,\"width\":25}', '/svg/lan2.png', '{\"height\":0,\"show\":false,\"type\":\"circle\",\"width\":0}', '', '', '', '', '', '', '', '{\"cursor\":\"pointer\",\"fill\":\"transparent\",\"lineWidth\":1,\"radius\":4,\"stroke\":\"#ffffff\"}', 'LAN', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4303, 'node', '5GC System Architecture5', 'LAN', 'rect', 30, 30, -195, '[500,10]', '{\"height\":25,\"img\":\"/svg/service.svg\",\"offset\":20,\"show\":false,\"width\":25}', '', '', '', '', '', '', '', '', '', '{\"active\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"fill\":\"rgb(250, 250, 250)\",\"lineWidth\":1,\"stroke\":\"rgb(224, 224, 224)\"},\"fill\":\"#87cefa\",\"highlight\":{\"fill\":\"rgb(223, 234, 255)\",\"lineWidth\":2,\"stroke\":\"#4572d9\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"fill\":\"rgb(247, 250, 255)\",\"lineWidth\":1,\"stroke\":\"rgb(191, 213, 255)\"},\"lineWidth\":1,\"radius\":4,\"selected\":{\"fill\":\"rgb(255, 255, 255)\",\"lineWidth\":4,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#87cefa\"}', '', '{\"offset\":0,\"position\":\"center\",\"style\":{\"fill\":\"#000000\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4304, 'edge', '5GC System Architecture5', 'NEF~1706494552592~lan5', 'line', 0, 0, 0, '', '', '', '', '', 'NEF', 'lan4', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4305, 'edge', '5GC System Architecture5', 'LMF~1706495015507~lan6', 'polyline', 0, 0, 0, '', '', '', '', '', 'LMF', 'lan6', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4306, 'edge', '5GC System Architecture5', 'OMC~1706495150020~lan7', 'polyline', 0, 0, 0, '', '', '', '', '', 'OMC', 'lan7', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4307, 'edge', '5GC System Architecture5', 'AUSF~1706495243932~lan1', 'polyline', 0, 0, 0, '', '', '', '', '', 'AUSF', 'lan1', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4308, 'edge', '5GC System Architecture5', 'AMF~1706495271064~lan2', 'polyline', 0, 0, 0, '', '', '', '', '', 'AMF', 'lan2', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4309, 'edge', '5GC System Architecture5', 'NRF~1706495715971~lan3', 'polyline', 0, 0, 0, '', '', '', '', '', 'NRF', 'lan5', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4310, 'edge', '5GC System Architecture5', 'SMF~1706495739277~lan4', 'polyline', 0, 0, 0, '', '', '', '', '', 'SMF', 'lan4', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4311, 'edge', '5GC System Architecture5', 'IMS~1706496047466~lan5', 'polyline', 0, 0, 0, '', '', '', '', '', 'IMS', 'lan6', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4312, 'edge', '5GC System Architecture5', 'N3IWF~1706496082968~lan6', 'polyline', 0, 0, 0, '', '', '', '', '', 'N3IWF', 'lan3', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4313, 'edge', '5GC System Architecture5', 'RAN~1704534829539~UPF', 'line-animate-state', 0, 0, 0, '', '', '', '', '', 'Base', 'UPF', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":5,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#7b68ee\"}', 'N3', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":-10,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4314, 'edge', '5GC System Architecture5', 'DN~1704534869360~UPF', 'line-animate-state', 0, 0, 0, '', '', '', '', '', 'UPF', 'DN', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":5,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#7b68ee\"}', 'N6', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":-10,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4315, 'edge', '5GC System Architecture5', 'SMF~1704765447548~UPF', 'line-animate-state', 0, 0, 0, '', '', '', '', '', 'SMF', 'UPF', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'N4', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":3,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4316, 'edge', '5GC System Architecture5', '5GC~1704764825481~Base', 'line-animate-state', 0, 0, 0, '', '', '', '', '', 'Base', 'AMF', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', 'N2', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":-5,\"refY\":-2,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4317, 'edge', '5GC System Architecture5', 'MME~1706492758830~lan1', 'polyline', 0, 0, 0, '', '', '', '', '', 'MME', 'lan1', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4318, 'edge', '5GC System Architecture5', 'UDM~1706493787944~lan2', 'line', 0, 0, 0, '', '', '', '', '', 'UDM', 'lan3', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4319, 'edge', '5GC System Architecture5', 'PCF~1706494120334~lan3', 'line', 0, 0, 0, '', '', '', '', '', 'PCF', 'lan5', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); +INSERT IGNORE INTO `chart_graph` VALUES (4320, 'edge', '5GC System Architecture5', 'NSSF~1706494145341~lan4', 'polyline', 0, 0, 0, '', '', '', '', '', 'NSSF', 'lan2', '', '', '', '', '{\"active\":{\"lineWidth\":1,\"stroke\":\"rgb(95, 149, 255)\"},\"cursor\":\"pointer\",\"disable\":{\"lineWidth\":1,\"stroke\":\"rgb(245, 245, 245)\"},\"highlight\":{\"lineWidth\":2,\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"inactive\":{\"lineWidth\":1,\"stroke\":\"rgb(234, 234, 234)\"},\"lineWidth\":2,\"offset\":20,\"radius\":2,\"selected\":{\"lineWidth\":2,\"shadowBlur\":10,\"shadowColor\":\"rgb(95, 149, 255)\",\"stroke\":\"rgb(95, 149, 255)\",\"text-shape\":{\"fontWeight\":500}},\"stroke\":\"#ffffff\"}', '', '{\"autoRotate\":false,\"position\":\"middle\",\"refX\":0,\"refY\":0,\"style\":{\"fill\":\"#ffffff\",\"fontSize\":12,\"fontWeight\":500}}'); SET FOREIGN_KEY_CHECKS = 1; diff --git a/features/cdr/cdrevent.go b/features/cdr/cdrevent.go index 2f0efecd..02c95243 100644 --- a/features/cdr/cdrevent.go +++ b/features/cdr/cdrevent.go @@ -279,11 +279,7 @@ func PostCDREventFromSMF(w http.ResponseWriter, r *http.Request) { } // 推送到ws订阅组 - // if v, ok := cdrEvent.CDR["recordType"]; ok { - // if v == "MOC" || v == "MTSM" { - // wsService.NewWSSendImpl.ByGroupID(wsService.GROUP_IMS_CDR, cdrEvent) - // } - // } + wsService.NewWSSendImpl.ByGroupID(wsService.GROUP_SMF_CDR, cdrEvent) services.ResponseStatusOK204NoContent(w) } diff --git a/features/cm/license.go b/features/cm/license.go index ffee447b..ed4299cc 100644 --- a/features/cm/license.go +++ b/features/cm/license.go @@ -8,7 +8,7 @@ import ( "os/exec" "strings" - "be.ems/lib/core/utils/ctx" + "be.ems/lib/core/ctx" "be.ems/lib/dborm" "be.ems/lib/log" "be.ems/lib/services" diff --git a/features/cm/param.go b/features/cm/param.go index 6ba6ccdb..9e5a62fb 100644 --- a/features/cm/param.go +++ b/features/cm/param.go @@ -3,7 +3,7 @@ package cm import ( "strings" - "be.ems/lib/core/utils/ctx" + "be.ems/lib/core/ctx" "be.ems/lib/global" "be.ems/lib/log" "be.ems/lib/services" diff --git a/features/dbrest/dbrest.go b/features/dbrest/dbrest.go index 1a03083a..4d3888ac 100644 --- a/features/dbrest/dbrest.go +++ b/features/dbrest/dbrest.go @@ -9,7 +9,7 @@ import ( "strings" "time" - "be.ems/lib/core/utils/ctx" + "be.ems/lib/core/ctx" "be.ems/lib/dborm" "be.ems/lib/global" "be.ems/lib/log" diff --git a/features/event/event.go b/features/event/event.go index c0cb25ce..66164b1a 100644 --- a/features/event/event.go +++ b/features/event/event.go @@ -2,26 +2,35 @@ 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" wsService "be.ems/src/modules/ws/service" "github.com/gin-gonic/gin" ) var ( - UriUEEvent = "/upload-ue/v1/:eventType" + // 走Gin + UriUEEventAMF = "/upload-ue/v1/:eventType" + // 走Mux + UriUEEvent = config.DefaultUriPrefix + "/logManagement/v1/elementType/{elementTypeValue}/objectType/ueEvent" + CustomUriUEEvent = config.UriPrefix + "/logManagement/v1/elementType/{elementTypeValue}/objectType/ueEvent" ) type UEEvent struct { NeType string `json:"neType" xorm:"ne_type"` NeName string `json:"neName" xorm:"ne_name"` RmUID string `json:"rmUID" xorm:"rm_uid"` - Timestamp int `json:"timestamp" xorm:"timestamp"` + Timestamp int64 `json:"timestamp" xorm:"timestamp"` EventType string `json:"eventType" xorm:"event_type"` EventJson map[string]any `json:"eventJSON" xorm:"event_json"` } @@ -51,13 +60,13 @@ func PostUEEventFromAMF(c *gin.Context) { return } ueEvent.NeType = "AMF" - ueEvent.Timestamp = int(time.Now().Unix()) + ueEvent.Timestamp = time.Now().Unix() ueEvent.EventType = eventType - log.Trace("ueEvent:", ueEvent) + log.Trace("ueEvent AMF:", ueEvent) - affected, err := dborm.XormInsertTableOne("ue_event", ueEvent) + affected, err := dborm.XormInsertTableOne("ue_event_amf", ueEvent) if err != nil && affected <= 0 { - log.Error("Failed to insert ue_event:", err) + log.Error("Failed to insert ue_event_amf:", err) services.ResponseInternalServerError500ProcessError(c.Writer, err) return } @@ -67,3 +76,30 @@ func PostUEEventFromAMF(c *gin.Context) { services.ResponseStatusOK204NoContent(c.Writer) } + +func PostUEEvent(w http.ResponseWriter, r *http.Request) { + log.Info("PostUEEvent processing... ") + + neType := ctx.GetParam(r, "elementTypeValue") + var ueEvent UEEvent + if err := ctx.ShouldBindJSON(r, &ueEvent); err != nil { + services.ResponseInternalServerError500ProcessError(w, err) + return + } + + ueEvent.NeType = strings.ToUpper(neType) + tableName := fmt.Sprintf("ue_event_%s", strings.ToLower(neType)) + affected, err := dborm.XormInsertTableOne(tableName, ueEvent) + if err != nil && affected <= 0 { + log.Error("Failed to insert "+tableName, err) + services.ResponseInternalServerError500ProcessError(w, err) + return + } + + // 推送到ws订阅组 + if ueEvent.NeType == "MME" { + wsService.NewWSSendImpl.ByGroupID(wsService.GROUP_MME_UE, ueEvent) + } + + services.ResponseStatusOK204NoContent(w) +} diff --git a/features/file/file.go b/features/file/file.go index 7162b3f8..8300f043 100644 --- a/features/file/file.go +++ b/features/file/file.go @@ -5,7 +5,7 @@ import ( "net/http" "path/filepath" - "be.ems/lib/core/utils/ctx" + "be.ems/lib/core/ctx" "be.ems/lib/dborm" "be.ems/lib/file" "be.ems/lib/log" diff --git a/features/mml/mml.go b/features/mml/mml.go index 1df4fcae..04417737 100644 --- a/features/mml/mml.go +++ b/features/mml/mml.go @@ -54,8 +54,8 @@ var ( var ( TIME_DELAY_AFTER_WRITE time.Duration = 200 TIME_DEAD_LINE time.Duration = 10 - WIN_ROW_SIZE byte = 100 - WIN_COL_SIZE byte = 100 + WIN_ROW_SIZE int16 = 200 + WIN_COL_SIZE int16 = 120 BUFFER_SIZE int = 65535 ) @@ -118,9 +118,15 @@ func PostMML2ToNF(w http.ResponseWriter, r *http.Request) { // services.ResponseWithJson(w, http.StatusOK, response) // return // } + // 发送窗口大小设置命令 - conn.Write([]byte{255, 251, 31}) // 发送WILL WINDOW SIZE - conn.Write([]byte{255, 250, 31, 0, WIN_ROW_SIZE, 0, WIN_COL_SIZE, 255, 240}) // 发送设置 WINDOW SIZE + conn.Write([]byte{255, 251, 31}) // 发送WILL WINDOW SIZE + conn.Write([]byte{ + 255, 250, 31, + byte(WIN_COL_SIZE >> 8), byte(WIN_COL_SIZE & 0xFF), + byte(WIN_ROW_SIZE >> 8), byte(WIN_ROW_SIZE & 0xFF), + 255, 240, + }) // 发送设置 WINDOW SIZE conn.SetDeadline(time.Now().Add(TIME_DEAD_LINE * time.Second)) loginStr := fmt.Sprintf("%s\n%s\n", config.GetYamlConfig().MML.User, config.GetYamlConfig().MML.Password) diff --git a/features/ue/ue.go b/features/ue/ue.go index d9df8cda..17b35d20 100644 --- a/features/ue/ue.go +++ b/features/ue/ue.go @@ -8,13 +8,14 @@ import ( "strings" "time" - "be.ems/lib/core/utils/ctx" + "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" tokenConst "be.ems/src/framework/constants/token" + neService "be.ems/src/modules/network_element/service" "github.com/go-resty/resty/v2" "github.com/gorilla/mux" ) @@ -261,20 +262,12 @@ type UEInfoResponse struct { // Get UEInfo from NF/NFs, SMF Online users func GetUEInfoFromNF(w http.ResponseWriter, r *http.Request) { - log.Info("GetUEInfoFromNF processing... ") + log.Debug("GetUEInfoFromNF processing... ") - vars := mux.Vars(r) - neType := vars["elementTypeValue"] - if neType == "" { - services.ResponseNotFound404UriNotExist(w, r) - return - } - //neTypeLower := strings.ToLower(neType) - var neId string - neIds := services.GetParamsArrByName("neId", r) - if len(neIds) == 1 { - neId = neIds[0] - } else { + neId := ctx.GetQuery(r, "neId") + neType := ctx.GetParam(r, "elementTypeValue") + if neType == "" || neId == "" { + log.Error("elementTypeValue/neId is empty") services.ResponseNotFound404UriNotExist(w, r) return } @@ -283,93 +276,74 @@ func GetUEInfoFromNF(w http.ResponseWriter, r *http.Request) { if len(tenantNames) > 0 { tenantName = tenantNames[0] } - // token, err := services.CheckFrontValidRequest(w, r) - // if err != nil { - // log.Error("Request error:", err) - // return - // } - // log.Debug("token:", token) - neInfo, err := dborm.XormGetNeInfo(neType, neId) - if err != nil { - log.Error("Failed to XormGetNeInfo:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } else if neInfo == nil { - err := global.ErrCMNotFoundTargetNE - log.Error(global.ErrCMNotFoundTargetNE) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - log.Trace("neInfo:", neInfo) + neInfo := neService.NewNeInfoImpl.SelectNeInfoByNeTypeAndNeID(neType, neId) - hostUri := fmt.Sprintf("http://%s:%v", neInfo.Ip, neInfo.Port) - requestURI2NF := fmt.Sprintf("%s%s", hostUri, r.RequestURI) - // for apifox mock test - // hostUri := "http://127.0.0.1:4523" - // requestURI2NF := hostUri + "/m1/3157310-1528434-default/api/rest/ueManagement/v1/elementType/smf/objectType/ueInfo?apifoxApiId=128609449" - - log.Debug("requestURI2NF:", requestURI2NF) - - resp, err := client.R(). - EnableTrace(). - SetHeaders(map[string]string{tokenConst.HEADER_KEY: r.Header.Get(tokenConst.HEADER_KEY)}). - // SetHeaders(map[string]string{"accessToken": token}). - SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}). - SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}). - Get(requestURI2NF) - if err != nil { - log.Error("Get system state from NF is failed:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } else { - // multi-tenancy solution - var tenantID, where string - //var cols []string - if tenantName != "" { - where = fmt.Sprintf("status='1' and tenant_name='%s'", tenantName) - tenantID, _ = dborm.XormGetSingleColStringByWhere("sys_tenant", "tenant_id", where) + var response services.MapResponse + if neInfo.NeId == neId && neInfo.NeId != "" { + requestURI2NF := fmt.Sprintf("http://%s:%v%s", neInfo.IP, neInfo.Port, r.RequestURI) + log.Debug("requestURI2NF:", requestURI2NF) + resp, err := client.R(). + EnableTrace(). + SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}). + SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}). + Get(requestURI2NF) + if err != nil { + log.Error("Failed to Get from NF:", err) + services.ResponseInternalServerError500ProcessError(w, err) + return } else { - userName := ctx.LoginUserToUserName(r) - where = fmt.Sprintf("status='1' and user_name='%s'", userName) - tenantID, _ = dborm.XormGetSingleColStringByWhere("sys_user", "tenant_id", where) - where = fmt.Sprintf("status='1' and tenant_id='%s'", tenantID) - tenantName, _ = dborm.XormGetSingleColStringByWhere("sys_tenant", "tenant_name", where) - } - if tenantID == "" { - var response UEInfoResponse - _ = json.Unmarshal(resp.Body(), &response) - for i := 0; i < len(response.Data); i++ { - where = fmt.Sprintf("status='1' and tenancy_type='IMSI' and '%s' like tenancy_key", response.Data[i].IMSI[5:]) - tenantID, _ = dborm.XormGetSingleColStringByWhere("sys_tenant", "parent_id", where) + // multi-tenancy solution + var tenantID, where string + //var cols []string + if tenantName != "" { + where = fmt.Sprintf("status='1' and tenant_name='%s'", tenantName) + tenantID, _ = dborm.XormGetSingleColStringByWhere("sys_tenant", "tenant_id", where) + } else { + userName := ctx.LoginUserToUserName(r) + where = fmt.Sprintf("status='1' and user_name='%s'", userName) + tenantID, _ = dborm.XormGetSingleColStringByWhere("sys_user", "tenant_id", where) where = fmt.Sprintf("status='1' and tenant_id='%s'", tenantID) tenantName, _ = dborm.XormGetSingleColStringByWhere("sys_tenant", "tenant_name", where) - log.Tracef("tenantName: %s tenantID: %s", tenantName, tenantID) - response.Data[i].TenantName = tenantName } - services.ResponseWithJson(w, resp.StatusCode(), &response) - } else { - var tenantUEInfos []TenantUEInfo - var ueInfos UEInfoResponse - log.Trace("body:", string(resp.Body())) - _ = json.Unmarshal(resp.Body(), &ueInfos) - log.Trace("ueInfos:", ueInfos) - for _, n := range ueInfos.Data { - log.Trace("tenantID, n.IMSI[5:]:", tenantID, n.IMSI[5:]) - // "imsi": "imsi-460000100029999", - where = fmt.Sprintf("status='1' and parent_id='%s' and tenancy_type='IMSI' and '%s' like tenancy_key", tenantID, n.IMSI[5:]) - has, err := dborm.XormExistTableOne("sys_tenant", where) - if err == nil && has { - n.TenantName = tenantName - tenantUEInfos = append(tenantUEInfos, n) + if tenantID == "" { + var response UEInfoResponse + _ = json.Unmarshal(resp.Body(), &response) + for i := 0; i < len(response.Data); i++ { + where = fmt.Sprintf("status='1' and tenancy_type='IMSI' and '%s' like tenancy_key", response.Data[i].IMSI[5:]) + tenantID, _ = dborm.XormGetSingleColStringByWhere("sys_tenant", "parent_id", where) + where = fmt.Sprintf("status='1' and tenant_id='%s'", tenantID) + tenantName, _ = dborm.XormGetSingleColStringByWhere("sys_tenant", "tenant_name", where) + log.Tracef("tenantName: %s tenantID: %s", tenantName, tenantID) + response.Data[i].TenantName = tenantName } + services.ResponseWithJson(w, resp.StatusCode(), &response) + return + } else { + var tenantUEInfos []TenantUEInfo + var ueInfos UEInfoResponse + log.Trace("body:", string(resp.Body())) + _ = json.Unmarshal(resp.Body(), &ueInfos) + log.Trace("ueInfos:", ueInfos) + for _, n := range ueInfos.Data { + log.Trace("tenantID, n.IMSI[5:]:", tenantID, n.IMSI[5:]) + // "imsi": "imsi-460000100029999", + where = fmt.Sprintf("status='1' and parent_id='%s' and tenancy_type='IMSI' and '%s' like tenancy_key", tenantID, n.IMSI[5:]) + has, err := dborm.XormExistTableOne("sys_tenant", where) + if err == nil && has { + n.TenantName = tenantName + tenantUEInfos = append(tenantUEInfos, n) + } + } + var response UEInfoResponse + response.Data = tenantUEInfos + services.ResponseWithJson(w, resp.StatusCode(), &response) + return } - var response UEInfoResponse - response.Data = tenantUEInfos - services.ResponseWithJson(w, resp.StatusCode(), &response) - return } } + + services.ResponseWithJson(w, http.StatusOK, response) } // POST PCF User Info from NF/NFs diff --git a/go.mod b/go.mod index 181b5e64..8382a3b7 100644 --- a/go.mod +++ b/go.mod @@ -58,12 +58,30 @@ require ( github.com/andeya/goutil v1.0.1 // indirect github.com/andygrunwald/go-jira v1.16.0 // indirect github.com/beorn7/perks v1.0.1 // indirect +<<<<<<< HEAD github.com/bsm/redislock v0.9.4 // indirect github.com/bytedance/go-tagexpr/v2 v2.9.11 // indirect github.com/bytedance/sonic v1.11.6 // indirect github.com/bytedance/sonic/loader v0.1.1 // indirect github.com/casbin/casbin/v2 v2.80.0 // indirect github.com/casbin/govaluate v1.1.0 // indirect +======= + github.com/creack/pty v1.1.9 // indirect + github.com/go-admin-team/go-admin-core v1.3.12-0.20221121065133-27b7dbe27a8f // indirect + github.com/kr/fs v0.1.0 // indirect + github.com/prometheus/client_model v0.5.0 // indirect + github.com/prometheus/common v0.48.0 // indirect + github.com/prometheus/procfs v0.12.0 // indirect + golang.org/x/sync v0.6.0 // indirect +) + +require ( + github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible // indirect + github.com/bsm/redislock v0.8.2 // indirect + github.com/bytedance/go-tagexpr/v2 v2.7.12 // indirect + github.com/bytedance/sonic v1.9.1 // indirect + github.com/casbin/casbin/v2 v2.54.0 // indirect +>>>>>>> origin/main github.com/cespare/xxhash/v2 v2.2.0 // indirect github.com/chanxuehong/rand v0.0.0-20211009035549-2f07823e8e99 // indirect github.com/chanxuehong/wechat v0.0.0-20230222024006-36f0325263cd // indirect diff --git a/go.sum b/go.sum index 6be4f0f1..6947a1e1 100644 --- a/go.sum +++ b/go.sum @@ -45,6 +45,7 @@ github.com/chanxuehong/wechat v0.0.0-20230222024006-36f0325263cd h1:v3JNsFZmplLO github.com/chanxuehong/wechat v0.0.0-20230222024006-36f0325263cd/go.mod h1:mysjrtCs9MmN8hqDf4/mc4eQ26Rt9s1p5oO+fhJlLB4= github.com/chenjiandongx/ginprom v0.0.0-20210617023641-6c809602c38a h1:yTfhjWYoPomJkHVArtNHpo36FuOa6Kc2ZjTLvyyQ5Lg= github.com/chenjiandongx/ginprom v0.0.0-20210617023641-6c809602c38a/go.mod h1:lINNCb1ZH3c0uL/9ApaQ8muR4QILsi0STj8Ojt8ZmwU= +<<<<<<< HEAD github.com/cloudwego/base64x v0.1.4 h1:jwCgWpFanWmN8xoIUHa2rtzmkd5J2plF/dnLS6Xd/0Y= github.com/cloudwego/base64x v0.1.4/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w= github.com/cloudwego/iasm v0.2.0 h1:1KNIy1I1H9hNNFEEH3DVnI4UujN+1zjpuk6gwHLTssg= @@ -55,6 +56,33 @@ github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHH github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creack/pty v1.1.17 h1:QeVUsEDNrLBW4tMgZHvxy18sKtr6VI492kBhUfhDJNI= github.com/creack/pty v1.1.17/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= +======= +github.com/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F32mSOjUmXrMHnKwZdA8wcEefY7UVqBKYGjpdQY= +github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 h1:qSGYFH7+jGhDF8vLC+iwCD4WpbV1EBDSzWkJODFLams= +github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ= +github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= +github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= +github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/cpuguy83/go-md2man/v2 v2.0.3 h1:qMCsGGgs+MAzDFyp9LpAe1Lqy/fY/qCovCm0qnXZOBM= +github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= +github.com/creack/pty v1.1.9 h1:uDmaGzcdjhF4i/plgjmEsriH11Y0o7RKapEf/LDaM3w= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +>>>>>>> origin/main github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= @@ -94,6 +122,18 @@ github.com/go-admin-team/redisqueue/v2 v2.0.1-0.20231102124201-508101cc789a h1:E github.com/go-admin-team/redisqueue/v2 v2.0.1-0.20231102124201-508101cc789a/go.mod h1:9c1VaSgp3KI6jnzjvlCORtVMpkG3YtxSzjkNhudfyOU= github.com/go-forks/fsnotify v1.4.7 h1:lyiU2Wqd4fNGCQDn9dZ4UxSiSFgeU1rM6yIfahk8haY= github.com/go-forks/fsnotify v1.4.7/go.mod h1:AU8mot+GznW5+B4jRJHxKg/2EeO+jMORGRkKSxs0biw= +<<<<<<< HEAD +======= +github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= +github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= +github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= +github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= +>>>>>>> origin/main github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= @@ -400,6 +440,16 @@ golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.12.0 h1:rmsUpXtvNzj340zd98LZ4KntptpfRHwpFOHG188oHXc= golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +<<<<<<< HEAD +======= +golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +>>>>>>> origin/main golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -429,8 +479,16 @@ golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +<<<<<<< HEAD golang.org/x/sys v0.0.0-20220330033206-e17cdc41300f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220422013727-9388b58f7150/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +======= +golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210902050250-f475640dd07b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +>>>>>>> origin/main golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -464,10 +522,19 @@ golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +<<<<<<< HEAD golang.org/x/text v0.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk= golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= +======= +golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +>>>>>>> origin/main golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= diff --git a/lib/core/constants/cachekey/cachekey.go b/lib/core/constants/cachekey/cachekey.go deleted file mode 100644 index 0e69445f..00000000 --- a/lib/core/constants/cachekey/cachekey.go +++ /dev/null @@ -1,24 +0,0 @@ -package cachekey - -// 缓存的key常量 - -// 登录用户 -const LOGIN_TOKEN_KEY = "login_tokens:" - -// 验证码 -const CAPTCHA_CODE_KEY = "captcha_codes:" - -// 参数管理 -const SYS_CONFIG_KEY = "sys_config:" - -// 字典管理 -const SYS_DICT_KEY = "sys_dict:" - -// 防重提交 -const REPEAT_SUBMIT_KEY = "repeat_submit:" - -// 限流 -const RATE_LIMIT_KEY = "rate_limit:" - -// 登录账户密码错误次数 -const PWD_ERR_CNT_KEY = "pwd_err_cnt:" diff --git a/lib/core/utils/ctx/ctx.go b/lib/core/ctx/ctx.go similarity index 96% rename from lib/core/utils/ctx/ctx.go rename to lib/core/ctx/ctx.go index fefb6b4c..723dd808 100644 --- a/lib/core/utils/ctx/ctx.go +++ b/lib/core/ctx/ctx.go @@ -17,8 +17,8 @@ import ( "golang.org/x/text/language" ) -// Param 地址栏参数{id} -func Param(r *http.Request, key string) string { +// GetParam 地址栏参数{id} +func GetParam(r *http.Request, key string) string { vars := mux.Vars(r) v, ok := vars[key] if ok { @@ -47,7 +47,7 @@ func QueryMap(r *http.Request) map[string]any { return queryParams } -// ShouldBindQuery 查询参数读取json请求结构团体 +// ShouldBindQuery 查询参数读取json请求结构团体 &xxx func ShouldBindQuery(r *http.Request, args any) error { queryParams := QueryMap(r) body, err := json.Marshal(queryParams) @@ -57,7 +57,7 @@ func ShouldBindQuery(r *http.Request, args any) error { return json.Unmarshal(body, args) } -// 读取json请求结构团体 +// ShouldBindJSON 读取json请求结构团体 &xxx func ShouldBindJSON(r *http.Request, args any) error { body, err := io.ReadAll(io.LimitReader(r.Body, 1<<20)) // 设置较大的长度,例如 1<<20 (1MB) if err != nil { diff --git a/lib/core/datasource/datasource.go b/lib/core/datasource/datasource.go deleted file mode 100644 index 1ef16af8..00000000 --- a/lib/core/datasource/datasource.go +++ /dev/null @@ -1,49 +0,0 @@ -package datasource - -import ( - "database/sql" - "regexp" - - "be.ems/lib/dborm" - "xorm.io/xorm" -) - -// 获取默认数据源 -func DefaultDB() *xorm.Engine { - return dborm.DbClient.XEngine -} - -// RawDB 原生查询语句 -func RawDB(source string, sql string, parameters []any) ([]map[string]any, error) { - // 数据源 - db := DefaultDB() - - // 使用正则表达式替换连续的空白字符为单个空格 - fmtSql := regexp.MustCompile(`\s+`).ReplaceAllString(sql, " ") - - // log.Infof("sql=> %v", fmtSql) - // log.Infof("parameters=> %v", parameters) - - // 查询结果 - var rows []map[string]any - err := db.SQL(fmtSql, parameters...).Find(&rows) - if err != nil { - return nil, err - } - return rows, nil -} - -// ExecDB 原生执行语句 -func ExecDB(source string, sql string, parameters []any) (sql.Result, error) { - // 数据源 - db := DefaultDB() - - // 使用正则表达式替换连续的空白字符为单个空格 - fmtSql := regexp.MustCompile(`\s+`).ReplaceAllString(sql, " ") - // 执行结果 - res, err := db.Exec(append([]any{fmtSql}, parameters...)...) - if err != nil { - return nil, err - } - return res, err -} diff --git a/lib/core/datasource/repo.go b/lib/core/datasource/repo.go deleted file mode 100644 index 7b81a4e1..00000000 --- a/lib/core/datasource/repo.go +++ /dev/null @@ -1,126 +0,0 @@ -package datasource - -import ( - "fmt" - "reflect" - "strconv" - "strings" -) - -// PageNumSize 分页页码记录数 -func PageNumSize(pageNum, pageSize any) (int, int) { - // 记录起始索引 - pageNumStr := fmt.Sprintf("%v", pageNum) - num := 1 - if v, err := strconv.Atoi(pageNumStr); err == nil && v > 0 { - num = v - } - - // 显示记录数 - pageSizeStr := fmt.Sprintf("%v", pageSize) - size := 10 - if v, err := strconv.Atoi(pageSizeStr); err == nil && v > 0 { - size = v - } - return num - 1, size -} - -// SetFieldValue 判断结构体内是否存在指定字段并设置值 -func SetFieldValue(obj any, fieldName string, value any) { - // 获取结构体的反射值 - userValue := reflect.ValueOf(obj) - - // 获取字段的反射值 - fieldValue := userValue.Elem().FieldByName(fieldName) - - // 检查字段是否存在 - if fieldValue.IsValid() && fieldValue.CanSet() { - // 获取字段的类型 - fieldType := fieldValue.Type() - - // 转换传入的值类型为字段类型 - switch fieldType.Kind() { - case reflect.String: - if value == nil { - fieldValue.SetString("") - } else { - fieldValue.SetString(fmt.Sprintf("%v", value)) - } - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: - intValue, err := strconv.ParseInt(fmt.Sprintf("%v", value), 10, 64) - if err != nil { - intValue = 0 - } - fieldValue.SetInt(intValue) - case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: - uintValue, err := strconv.ParseUint(fmt.Sprintf("%v", value), 10, 64) - if err != nil { - uintValue = 0 - } - fieldValue.SetUint(uintValue) - case reflect.Float32, reflect.Float64: - floatValue, err := strconv.ParseFloat(fmt.Sprintf("%v", value), 64) - if err != nil { - floatValue = 0 - } - fieldValue.SetFloat(floatValue) - default: - // 设置字段的值 - fieldValue.Set(reflect.ValueOf(value).Convert(fieldValue.Type())) - } - } -} - -// ConvertIdsSlice 将 []string 转换为 []any -func ConvertIdsSlice(ids []string) []any { - // 将 []string 转换为 []any - arr := make([]any, len(ids)) - for i, v := range ids { - arr[i] = v - } - return arr -} - -// 查询-参数值的占位符 -func KeyPlaceholderByQuery(sum int) string { - placeholders := make([]string, sum) - for i := 0; i < sum; i++ { - placeholders[i] = "?" - } - return strings.Join(placeholders, ",") -} - -// 插入-参数映射键值占位符 keys, placeholder, values -func KeyPlaceholderValueByInsert(params map[string]any) ([]string, string, []any) { - // 参数映射的键 - keys := make([]string, len(params)) - // 参数映射的值 - values := make([]any, len(params)) - sum := 0 - for k, v := range params { - keys[sum] = k - values[sum] = v - sum++ - } - // 参数值的占位符 - placeholders := make([]string, sum) - for i := 0; i < sum; i++ { - placeholders[i] = "?" - } - return keys, strings.Join(placeholders, ","), values -} - -// 更新-参数映射键值占位符 keys, values -func KeyValueByUpdate(params map[string]any) ([]string, []any) { - // 参数映射的键 - keys := make([]string, len(params)) - // 参数映射的值 - values := make([]any, len(params)) - sum := 0 - for k, v := range params { - keys[sum] = k + "=?" - values[sum] = v - sum++ - } - return keys, values -} diff --git a/lib/core/mml_client/mml_client.go b/lib/core/mml_client/mml_client.go deleted file mode 100644 index a0040244..00000000 --- a/lib/core/mml_client/mml_client.go +++ /dev/null @@ -1,87 +0,0 @@ -package mmlclient - -import ( - "bufio" - "fmt" - "io" - "net" - "time" - - "be.ems/lib/core/conf" -) - -// 定义MMLClient结构体 -type MMLClient struct { - awaitTime time.Duration // 等待时间 - conn net.Conn - reader *bufio.Reader - size int // 包含字符 -} - -// 封装NewMMLClient函数,用于创建MMLClient实例 -// 网元UDM的IP地址 "198.51.100.1" -func NewMMLClient(ip string) (*MMLClient, error) { - // 创建TCP连接 - portMML := conf.Get("mml.port").(int) - hostMML := fmt.Sprintf("%s:%d", ip, portMML) - conn, err := net.Dial("tcp", hostMML) - if err != nil { - return nil, err - } - - // 进行登录 - usernameMML := conf.Get("mml.user").(string) - passwordMML := conf.Get("mml.password").(string) - fmt.Fprintln(conn, usernameMML) - fmt.Fprintln(conn, passwordMML) - - // 发送后等待 - awaitTime := time.Duration(300) * time.Millisecond - time.Sleep(awaitTime) - - // 读取内容 - buf := make([]byte, 1024*1024*1) - n, err := conn.Read(buf) - if err != nil { - return nil, err - } - - // 创建MMLClient实例 - client := &MMLClient{ - conn: conn, - reader: bufio.NewReader(conn), - awaitTime: awaitTime, - size: n, - } - - return client, nil -} - -// 封装Send函数,用于向TCP连接发送数据 -func (c *MMLClient) Send(msg string) error { - _, err := fmt.Fprintln(c.conn, msg) - if err != nil { - return err - } - time.Sleep(c.awaitTime) - return nil -} - -// 封装Receive函数,用于从TCP连接中接收数据 -func (c *MMLClient) Receive() (string, error) { - buf := make([]byte, 1024*1024*1) - n, err := c.reader.Read(buf) - if err != nil { - if err == io.EOF { - return "", fmt.Errorf("server closed the connection") - } - return "", err - } - c.size += n - return string(buf[0:n]), nil -} - -// 封装Close函数,用于关闭TCP连接 -func (c *MMLClient) Close() error { - return c.conn.Close() -} diff --git a/lib/core/mml_client/send.go b/lib/core/mml_client/send.go deleted file mode 100644 index 943772c4..00000000 --- a/lib/core/mml_client/send.go +++ /dev/null @@ -1,105 +0,0 @@ -package mmlclient - -import ( - "fmt" - "strings" -) - -// 发送MML原始消息 -// ip 网元IP地址 -// msg 指令 -func MMLSendMsg(ip, msg string) (string, error) { - // 创建MMLClient实例 - client, err := NewMMLClient(ip) - if err != nil { - return "", fmt.Errorf("failed to create MMLClient instance: %v", err) - } - defer client.Close() - - // 发送数据 - err = client.Send(msg) - if err != nil { - return "", fmt.Errorf("sending data failed: %v", err) - } - - // 接收数据 - data, err := client.Receive() - if err != nil { - return "", fmt.Errorf("failed to receive data: %v", err) - } - - return data, nil -} - -// 发送MML -// ip 网元IP地址 -// msg 指令 -func MMLSendMsgToString(ip, msg string) (string, error) { - // 发送获取数据 - str, err := MMLSendMsg(ip, msg) - if err != nil { - return "", err - } - - str = strings.ToLower(str) - - // 截断 - index := strings.Index(str, "\n") - if index != -1 { - str = str[:index] - } - - // 命令成功 - if strings.Contains(str, "ok") || strings.Contains(str, "success") { - return str, nil - } - - return "", fmt.Errorf(str) -} - -// 发送MML -// ip 网元IP地址 -// msg 指令 -func MMLSendMsgToMap(ip, msg string) (map[string]string, error) { - // 发送获取数据 - str, err := MMLSendMsg(ip, msg) - if err != nil { - return nil, err - } - - // 无数据 - if strings.HasPrefix(str, "No Auth Data") { - return nil, fmt.Errorf("no auth data") - } - - // 初始化一个map用于存储拆分后的键值对 - m := make(map[string]string) - - var items []string - if strings.Contains(str, "\r\n") { - // 按照分隔符"\r\n"进行拆分 - items = strings.Split(str, "\r\n") - } else if strings.Contains(str, "\n") { - // 按照分隔符"\n"进行拆分 - items = strings.Split(str, "\n") - } - - // 遍历拆分后的结果 - for _, item := range items { - var pair []string - - if strings.Contains(item, "=") { - // 按照分隔符"="进行拆分键值对 - pair = strings.SplitN(item, "=", 2) - } else if strings.Contains(item, ":") { - // 按照分隔符":"进行拆分键值对 - pair = strings.SplitN(item, ":", 2) - } - - if len(pair) == 2 { - // 将键值对存入map中 - m[pair[0]] = pair[1] - } - } - return m, err -} diff --git a/lib/core/utils/date/date.go b/lib/core/utils/date/date.go deleted file mode 100644 index d6235ea4..00000000 --- a/lib/core/utils/date/date.go +++ /dev/null @@ -1,70 +0,0 @@ -package date - -import ( - "fmt" - "time" - - "be.ems/lib/log" -) - -const ( - // 年 列如:2022 - YYYY = "2006" - // 年-月 列如:2022-12 - YYYY_MM = "2006-01" - // 年-月-日 列如:2022-12-30 - YYYY_MM_DD = "2006-01-02" - // 年月日时分秒 列如:20221230010159 - YYYYMMDDHHMMSS = "20060102150405" - // 年-月-日 时:分:秒 列如:2022-12-30 01:01:59 - YYYY_MM_DD_HH_MM_SS = "2006-01-02 15:04:05" -) - -// 格式时间字符串 -// -// dateStr 时间字符串 -// -// formatStr 时间格式 默认YYYY-MM-DD HH:mm:ss -func ParseStrToDate(dateStr, formatStr string) time.Time { - t, err := time.Parse(formatStr, dateStr) - if err != nil { - log.Infof("utils ParseStrToDate err %v", err) - return time.Time{} - } - return t -} - -// 格式时间 -// -// date 可转的Date对象 -// -// formatStr 时间格式 默认YYYY-MM-DD HH:mm:ss -func ParseDateToStr(date any, formatStr string) string { - t, ok := date.(time.Time) - if !ok { - switch v := date.(type) { - case int64: - if v == 0 { - return "" - } - t = time.UnixMilli(v) - case string: - parsedTime, err := time.Parse(formatStr, v) - if err != nil { - fmt.Printf("utils ParseDateToStr err %v \n", err) - return "" - } - t = parsedTime - default: - return "" - } - } - return t.Format(formatStr) -} - -// 格式时间成日期路径 -// -// 年/月 列如:2022/12 -func ParseDatePath(date time.Time) string { - return date.Format("2006/01") -} diff --git a/lib/core/utils/parse/parse.go b/lib/core/utils/parse/parse.go deleted file mode 100644 index ed2fd5dd..00000000 --- a/lib/core/utils/parse/parse.go +++ /dev/null @@ -1,139 +0,0 @@ -package parse - -import ( - "fmt" - "reflect" - "regexp" - "strconv" - "strings" - "time" - - "github.com/robfig/cron/v3" -) - -// Number 解析数值型 -func Number(str any) int64 { - switch str := str.(type) { - case string: - if str == "" { - return 0 - } - num, err := strconv.ParseInt(str, 10, 64) - if err != nil { - return 0 - } - return num - case int, int8, int16, int32, int64, uint, uint8, uint16, uint32, uint64: - return reflect.ValueOf(str).Int() - case float32, float64: - return int64(reflect.ValueOf(str).Float()) - default: - return 0 - } -} - -// Boolean 解析布尔型 -func Boolean(str any) bool { - switch str := str.(type) { - case string: - if str == "" || str == "false" || str == "0" { - return false - } - // 尝试将字符串解析为数字 - if num, err := strconv.ParseFloat(str, 64); err == nil { - return num != 0 - } - return true - case int, int8, int16, int32, int64, uint, uint8, uint16, uint32, uint64: - num := reflect.ValueOf(str).Int() - return num != 0 - case float32, float64: - num := reflect.ValueOf(str).Float() - return num != 0 - default: - return false - } -} - -// FirstUpper 首字母转大写 -// -// 字符串 abc_123!@# 结果 Abc_123 -func FirstUpper(str string) string { - if len(str) == 0 { - return str - } - reg := regexp.MustCompile(`[^_\w]+`) - str = reg.ReplaceAllString(str, "") - return strings.ToUpper(str[:1]) + str[1:] -} - -// Bit 比特位为单位 -func Bit(bit float64) string { - var GB, MB, KB string - - if bit > float64(1<<30) { - GB = fmt.Sprintf("%0.2f", bit/(1<<30)) - } - - if bit > float64(1<<20) && bit < (1<<30) { - MB = fmt.Sprintf("%.2f", bit/(1<<20)) - } - - if bit > float64(1<<10) && bit < (1<<20) { - KB = fmt.Sprintf("%.2f", bit/(1<<10)) - } - - if GB != "" { - return GB + "GB" - } else if MB != "" { - return MB + "MB" - } else if KB != "" { - return KB + "KB" - } else { - return fmt.Sprintf("%vB", bit) - } -} - -// CronExpression 解析 Cron 表达式,返回下一次执行的时间戳(毫秒) -// -// 【*/5 * * * * ?】 6个参数 -func CronExpression(expression string) int64 { - specParser := cron.NewParser(cron.Second | cron.Minute | cron.Hour | cron.Dom | cron.Month | cron.Dow | cron.Descriptor) - schedule, err := specParser.Parse(expression) - if err != nil { - fmt.Println(err) - return 0 - } - return schedule.Next(time.Now()).UnixMilli() -} - -// SafeContent 内容值进行安全掩码 -func SafeContent(value string) string { - if len(value) < 3 { - return strings.Repeat("*", len(value)) - } else if len(value) < 6 { - return string(value[0]) + strings.Repeat("*", len(value)-1) - } else if len(value) < 10 { - return string(value[0]) + strings.Repeat("*", len(value)-2) + string(value[len(value)-1]) - } else if len(value) < 15 { - return value[:2] + strings.Repeat("*", len(value)-4) + value[len(value)-2:] - } else { - return value[:3] + strings.Repeat("*", len(value)-6) + value[len(value)-3:] - } -} - -// RemoveDuplicates 数组内字符串去重 -func RemoveDuplicates(ids []string) []string { - uniqueIDs := make(map[string]bool) - uniqueIDSlice := make([]string, 0) - - for _, id := range ids { - _, ok := uniqueIDs[id] - if !ok && id != "" { - uniqueIDs[id] = true - uniqueIDSlice = append(uniqueIDSlice, id) - } - } - - return uniqueIDSlice -} diff --git a/lib/core/utils/regular/regular.go b/lib/core/utils/regular/regular.go deleted file mode 100644 index e4b9cc66..00000000 --- a/lib/core/utils/regular/regular.go +++ /dev/null @@ -1,54 +0,0 @@ -package regular - -import ( - "regexp" -) - -// Replace 正则替换 -func Replace(originStr, pattern, repStr string) string { - regex := regexp.MustCompile(pattern) - return regex.ReplaceAllString(originStr, repStr) -} - -// 判断是否为有效用户名格式 -// -// 用户名不能以数字开头,可包含大写小写字母,数字,且不少于5位 -func ValidUsername(username string) bool { - if username == "" { - return false - } - pattern := `^[a-zA-Z][a-z0-9A-Z]{5,}` - match, err := regexp.MatchString(pattern, username) - if err != nil { - return false - } - return match -} - -// 判断是否为有效手机号格式,1开头的11位手机号 -func ValidMobile(mobile string) bool { - if mobile == "" { - return false - } - pattern := `^1[3|4|5|6|7|8|9][0-9]\d{8}$` - match, err := regexp.MatchString(pattern, mobile) - if err != nil { - return false - } - return match -} - -// 判断是否为http(s)://开头 -// -// link 网络链接 -func ValidHttp(link string) bool { - if link == "" { - return false - } - pattern := `^http(s)?:\/\/+` - match, err := regexp.MatchString(pattern, link) - if err != nil { - return false - } - return match -} diff --git a/lib/core/utils/scan/scan.go b/lib/core/utils/scan/scan.go deleted file mode 100644 index 6313763a..00000000 --- a/lib/core/utils/scan/scan.go +++ /dev/null @@ -1,31 +0,0 @@ -package scan - -import ( - "net" - "strconv" -) - -func ScanPort(port int) bool { - ln, err := net.Listen("tcp", ":"+strconv.Itoa(port)) - if err != nil { - return true - } - defer ln.Close() - return false -} - -func ScanUDPPort(port int) bool { - ln, err := net.ListenUDP("udp", &net.UDPAddr{IP: net.IPv4(127, 0, 0, 1), Port: port}) - if err != nil { - return true - } - defer ln.Close() - return false -} - -func ScanPortWithProto(port int, proto string) bool { - if proto == "udp" { - return ScanUDPPort(port) - } - return ScanPort(port) -} diff --git a/lib/core/vo/login_user.go b/lib/core/vo/login_user.go index 1d4c9776..0b4899f4 100644 --- a/lib/core/vo/login_user.go +++ b/lib/core/vo/login_user.go @@ -23,6 +23,4 @@ type LoginUser struct { // User 用户信息 User dborm.User `json:"user"` - - Session dborm.Session `json:"-"` } diff --git a/lib/core/vo/router.go b/lib/core/vo/router.go deleted file mode 100644 index a3cc4083..00000000 --- a/lib/core/vo/router.go +++ /dev/null @@ -1,17 +0,0 @@ -package vo - -// Router 路由信息对象 -type Router struct { - // 路由名字 英文首字母大写 - Name string `json:"name"` - // 路由地址 - Path string `json:"path"` - // 其他元素 - Meta RouterMeta `json:"meta"` - // 组件地址 - Component string `json:"component"` - // 重定向地址 - Redirect string `json:"redirect"` - // 子路由 - Children []Router `json:"children,omitempty"` -} diff --git a/lib/core/vo/router_meta.go b/lib/core/vo/router_meta.go deleted file mode 100644 index b3447e05..00000000 --- a/lib/core/vo/router_meta.go +++ /dev/null @@ -1,17 +0,0 @@ -package vo - -// RouterMeta 路由元信息对象 -type RouterMeta struct { - // 设置该菜单在侧边栏和面包屑中展示的名字 - Title string `json:"title"` - // 设置该菜单的图标 - Icon string `json:"icon"` - // 设置为true,则不会被 缓存 - Cache bool `json:"cache"` - // 内链地址(http(s)://开头), 打开目标位置 '_blank' | '_self' | '' - Target string `json:"target"` - // 在菜单中隐藏子节点 - HideChildInMenu bool `json:"hideChildInMenu"` - // 在菜单中隐藏自己和子节点 - HideInMenu bool `json:"hideInMenu"` -} diff --git a/lib/core/vo/treeselect.go b/lib/core/vo/treeselect.go deleted file mode 100644 index 26776268..00000000 --- a/lib/core/vo/treeselect.go +++ /dev/null @@ -1,36 +0,0 @@ -package vo - -// import sysmenu "be.ems/features/sys_menu" - -// TreeSelect 树结构实体类 -type TreeSelect struct { - // ID 节点ID - ID string `json:"id"` - - // Label 节点名称 - Label string `json:"label"` - - // Title 节点名称旧版本layui - Title string `json:"title"` - - // Children 子节点 - Children []TreeSelect `json:"children"` -} - -// // SysMenuTreeSelect 使用给定的 SysMenu 对象解析为 TreeSelect 对象 -// func SysMenuTreeSelect(sysMenu sysmenu.SysMenu) TreeSelect { -// t := TreeSelect{} -// t.ID = sysMenu.MenuID -// t.Label = sysMenu.MenuName - -// if len(sysMenu.Children) > 0 { -// for _, menu := range sysMenu.Children { -// child := SysMenuTreeSelect(menu) -// t.Children = append(t.Children, child) -// } -// } else { -// t.Children = []TreeSelect{} -// } - -// return t -// } diff --git a/lib/midware/arrow_ip_addr.go b/lib/midware/arrow_ip_addr.go deleted file mode 100644 index c9c7a32c..00000000 --- a/lib/midware/arrow_ip_addr.go +++ /dev/null @@ -1,78 +0,0 @@ -package midware - -import ( - "encoding/json" - "net/http" - "strings" - "time" - - "be.ems/lib/dborm" - "be.ems/lib/services" -) - -// 已禁用 -// 登录策略限制登录时间和访问ip范围 -func ArrowIPAddr(next http.Handler) http.Handler { - return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - ipAddr := strings.Split(r.RemoteAddr, ":")[0] - - // 读取配置信息 登录策略设置 - result, err := dborm.XormGetConfig("Security", "loginSecurity") - if err != nil { - next.ServeHTTP(w, r) - return - } - data := make(map[string]any) - err = json.Unmarshal([]byte(result["value_json"].(string)), &data) - if err != nil { - next.ServeHTTP(w, r) - return - } - - // 开关 - switchStr := data["switch"].(string) - if switchStr == "0" { - next.ServeHTTP(w, r) - return - } - - ipRange := data["ipRange"].(string) - logintimeRange := data["logintime_range"].(string) - - // 检查ip - ips := strings.Split(ipRange, "/") - hasIP := false - for _, ip := range ips { - if ipAddr == ip { - hasIP = true - } - } - if !hasIP { - services.ResponseErrorWithJson(w, 502, "网关登录策略-IP限制: "+ipAddr) - return - } - - // 检查开放时间 - logintimeRangeArr := strings.Split(logintimeRange, " - ") - - // 加载中国时区 - loc, _ := time.LoadLocation("Asia/Shanghai") - // 获取当前时间 - currentTime := time.Now().In(loc) - - // 获取当前日期 - currentDate := time.Date(currentTime.Year(), currentTime.Month(), currentTime.Day(), 0, 0, 0, 0, currentTime.Location()) - ymd := currentDate.Format("2006-01-02") - - // 定义开始时间和结束时间 - startTime, _ := time.ParseInLocation("2006-01-02 15:04:05", ymd+" "+logintimeRangeArr[0], loc) - endTime, _ := time.ParseInLocation("2006-01-02 15:04:05", ymd+" "+logintimeRangeArr[1], loc) - - // 判断当前时间是否在范围内 - if currentTime.After(startTime) && currentTime.Before(endTime) { - next.ServeHTTP(w, r) - } else { - services.ResponseErrorWithJson(w, 502, "网关登录策略-不在开放时间范围内") - } - }) -} diff --git a/lib/midware/authorize.go b/lib/midware/authorize.go deleted file mode 100644 index b56e9c39..00000000 --- a/lib/midware/authorize.go +++ /dev/null @@ -1,229 +0,0 @@ -package midware - -import ( - "context" - "fmt" - "net/http" - - "be.ems/lib/core/cache" - "be.ems/lib/core/utils/ctx" - "be.ems/lib/core/vo" - "be.ems/lib/core/vo/result" - "be.ems/lib/dborm" - commonConstants "be.ems/src/framework/constants/common" - tokenUtils "be.ems/src/framework/utils/token" -) - -// 已禁用由Gin部分接管 -// Authorize 用户身份授权认证校验 -// -// 只需含有其中角色 "hasRoles": {"xxx"}, -// -// 只需含有其中权限 "hasPerms": {"xxx"}, -// -// 同时匹配其中角色 "matchRoles": {"xxx"}, -// -// 同时匹配其中权限 "matchPerms": {"xxx"}, -func Authorize(options map[string][]string) func(http.Handler) http.Handler { - return func(next http.Handler) http.Handler { - return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - // 获取请求头标识信息 - tokenStr := ctx.Authorization(r) - // 获取请求头标识信息-旧头 - accessToken := r.Header.Get("AccessToken") - if tokenStr == "" && accessToken != "" { - // 验证令牌 == 这里直接查数据库session - if !dborm.XormExistValidToken(accessToken, 0) { - ctx.JSON(w, 401, result.CodeMsg(401, "Invalid identity authorization valid error")) - return - } - se, err := dborm.XormUpdateSessionShakeTime(accessToken) - if err != nil { - ctx.JSON(w, 401, result.CodeMsg(401, "Invalid identity authorization shake error")) - return - } - - // 获取缓存的用户信息 - data, ok := cache.GetLocalTTL(se.AccountId) - if data == nil || !ok { - ctx.JSON(w, 401, result.CodeMsg(401, "Invalid identity authorization info error")) - return - } - loginUser := data.(vo.LoginUser) - - // 登录用户角色权限校验 - if options != nil { - var roles []string - for _, item := range loginUser.User.Roles { - roles = append(roles, item.RoleKey) - } - perms := loginUser.Permissions - verifyOk := verifyRolePermission(roles, perms, options) - if !verifyOk { - msg := fmt.Sprintf("Unauthorized access %s %s", r.Method, r.RequestURI) - ctx.JSON(w, 403, result.CodeMsg(403, msg)) - return - } - } - - // 在请求的 Context 中存储数据 - rContext := r.Context() - rContext = context.WithValue(rContext, ctx.ContextKey(commonConstants.CTX_LOGIN_USER), loginUser) - // 继续处理请求 - next.ServeHTTP(w, r.WithContext(rContext)) - return - } - - // 获取请求头标识信息 - if tokenStr == "" { - ctx.JSON(w, 401, result.CodeMsg(401, "Invalid identity authorization token error")) - return - } - - // 验证令牌 - claims, err := tokenUtils.Verify(tokenStr) - if err != nil { - ctx.JSON(w, 401, result.CodeMsg(401, "Invalid identity authorization valid error")) - return - } - - // 获取缓存的用户信息 - loginUser := tokenUtils.LoginUser(claims) - if loginUser.UserID == "" { - ctx.JSON(w, 401, result.CodeMsg(401, "Invalid identity authorization shake error")) - return - } - - // 检查刷新有效期后存入上下文 - tokenUtils.RefreshIn(&loginUser) - - // 登录用户角色权限校验 - if options != nil { - var roles []string - for _, item := range loginUser.User.Roles { - roles = append(roles, item.RoleKey) - } - perms := loginUser.Permissions - verifyOk := verifyRolePermission(roles, perms, options) - if !verifyOk { - msg := fmt.Sprintf("Unauthorized access %s %s", r.Method, r.RequestURI) - ctx.JSON(w, 403, result.CodeMsg(403, msg)) - return - } - } - - // 在请求的 Context 中存储数据 - rContext := r.Context() - rContext = context.WithValue(rContext, ctx.ContextKey(commonConstants.CTX_LOGIN_USER), loginUser) - // 继续处理请求 - next.ServeHTTP(w, r.WithContext(rContext)) - }) - } -} - -// verifyRolePermission 校验角色权限是否满足 -// -// roles 角色字符数组 -// -// perms 权限字符数组 -// -// options 参数 -func verifyRolePermission(roles, perms []string, options map[string][]string) bool { - // 直接放行 管理员角色或任意权限 - if contains(roles, "admin") || contains(perms, "*:*:*") { - return true - } - opts := make([]bool, 4) - - // 只需含有其中角色 - hasRole := false - if arr, ok := options["hasRoles"]; ok && len(arr) > 0 { - hasRole = some(roles, arr) - opts[0] = true - } - - // 只需含有其中权限 - hasPerms := false - if arr, ok := options["hasPerms"]; ok && len(arr) > 0 { - hasPerms = some(perms, arr) - opts[1] = true - } - - // 同时匹配其中角色 - matchRoles := false - if arr, ok := options["matchRoles"]; ok && len(arr) > 0 { - matchRoles = every(roles, arr) - opts[2] = true - } - - // 同时匹配其中权限 - matchPerms := false - if arr, ok := options["matchPerms"]; ok && len(arr) > 0 { - matchPerms = every(perms, arr) - opts[3] = true - } - - // 同时判断 含有其中 - if opts[0] && opts[1] { - return hasRole || hasPerms - } - // 同时判断 匹配其中 - if opts[2] && opts[3] { - return matchRoles && matchPerms - } - // 同时判断 含有其中且匹配其中 - if opts[0] && opts[3] { - return hasRole && matchPerms - } - if opts[1] && opts[2] { - return hasPerms && matchRoles - } - - return hasRole || hasPerms || matchRoles || matchPerms -} - -// contains 检查字符串数组中是否包含指定的字符串 -func contains(arr []string, target string) bool { - for _, str := range arr { - if str == target { - return true - } - } - return false -} - -// some 检查字符串数组中含有其中一项 -func some(origin []string, target []string) bool { - has := false - for _, t := range target { - for _, o := range origin { - if t == o { - has = true - break - } - } - if has { - break - } - } - return has -} - -// every 检查字符串数组中同时包含所有项 -func every(origin []string, target []string) bool { - match := true - for _, t := range target { - found := false - for _, o := range origin { - if t == o { - found = true - break - } - } - if !found { - match = false - break - } - } - return match -} diff --git a/lib/midware/cors.go b/lib/midware/cors.go deleted file mode 100644 index a9243694..00000000 --- a/lib/midware/cors.go +++ /dev/null @@ -1,67 +0,0 @@ -package midware - -import ( - "net/http" - "strings" -) - -// 已禁用由Gin部分接管 -// Cors 跨域 -func Cors(next http.Handler) http.Handler { - return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - // 设置Vary头部 - w.Header().Set("Vary", "Origin") - w.Header().Set("Keep-Alive", "timeout=5") - - requestOrigin := r.Header.Get("Origin") - if requestOrigin == "" { - next.ServeHTTP(w, r) - return - } - - w.Header().Set("Access-Control-Allow-Origin", "*") - - w.Header().Set("Access-Control-Allow-Credentials", "true") - - // OPTIONS - if r.Method == "OPTIONS" { - requestMethod := r.Header.Get("Access-Control-Request-Method") - if requestMethod == "" { - next.ServeHTTP(w, r) - return - } - - // 响应最大时间值 - w.Header().Set("Access-Control-Max-Age", "31536000") - - // 允许方法 - allowMethods := []string{ - "OPTIONS", - "HEAD", - "GET", - "POST", - "PUT", - "DELETE", - "PATCH", - } - w.Header().Set("Access-Control-Allow-Methods", strings.Join(allowMethods, ",")) - - // 允许请求头 - allowHeaders := []string{ - "Accesstoken", - "Content-Type", - "operationtype", - } - w.Header().Set("Access-Control-Allow-Headers", strings.Join(allowHeaders, ",")) - - w.WriteHeader(204) - return - } - - // 暴露请求头 - exposeHeaders := []string{"X-RepeatSubmit-Rest", "AccessToken"} - w.Header().Set("Access-Control-Expose-Headers", strings.Join(exposeHeaders, ",")) - - next.ServeHTTP(w, r) - }) -} diff --git a/lib/midware/mml_log.go b/lib/midware/mml_log.go index 91711477..c63ac730 100644 --- a/lib/midware/mml_log.go +++ b/lib/midware/mml_log.go @@ -9,10 +9,10 @@ import ( "strings" "time" - "be.ems/lib/core/datasource" - "be.ems/lib/core/utils/ctx" - "be.ems/lib/core/utils/date" + "be.ems/lib/core/ctx" "be.ems/lib/log" + "be.ems/src/framework/datasource" + "be.ems/src/framework/utils/date" ) // LogMML mml操作日志搜集 @@ -36,7 +36,7 @@ func LogMML(next http.Handler) http.Handler { // 收尾存入数据库的参数 mmlCmd := bodyArgs["mml"].([]any)[0] ipAddr := strings.Split(r.RemoteAddr, ":")[0] - neType := ctx.Param(r, "elementTypeValue") + neType := ctx.GetParam(r, "elementTypeValue") neId := ctx.GetQuery(r, "ne_id") timeStr := date.ParseDateToStr(time.Now(), date.YYYY_MM_DD_HH_MM_SS) diff --git a/lib/midware/operate_log.go b/lib/midware/operate_log.go index d8bc3964..a2647281 100644 --- a/lib/midware/operate_log.go +++ b/lib/midware/operate_log.go @@ -11,11 +11,11 @@ import ( "strings" "time" - "be.ems/lib/core/utils/ctx" - "be.ems/lib/core/utils/parse" + "be.ems/lib/core/ctx" "be.ems/src/framework/constants/common" "be.ems/src/framework/middleware/collectlogs" "be.ems/src/framework/utils/ip2region" + "be.ems/src/framework/utils/parse" "be.ems/src/modules/system/model" "be.ems/src/modules/system/service" ) diff --git a/lib/routes/routes.go b/lib/routes/routes.go index ac432a9a..7021371f 100644 --- a/lib/routes/routes.go +++ b/lib/routes/routes.go @@ -9,11 +9,11 @@ import ( "be.ems/features/cdr" "be.ems/features/cm" "be.ems/features/dbrest" + "be.ems/features/event" "be.ems/features/file" "be.ems/features/fm" "be.ems/features/lm" "be.ems/features/mml" - "be.ems/features/nbi" "be.ems/features/pm" "be.ems/features/security" "be.ems/features/sm" @@ -172,9 +172,9 @@ func init() { Register("POST", mml.CustomUriMML2, mml.PostMML2ToNF, nil) // Northbound Get NRM - Register("GET", nbi.GetNRMUri, nbi.NBIGetNRMFromNF, nil) + // Register("GET", nbi.GetNRMUri, nbi.NBIGetNRMFromNF, nil) - Register("GET", nbi.CustomGetNRMUri, nbi.NBIGetNRMFromNF, nil) + // Register("GET", nbi.CustomGetNRMUri, nbi.NBIGetNRMFromNF, nil) // Import/Export NF CM Register("GET", cm.NeCmUri, cm.ExportCmFromNF, nil) @@ -261,9 +261,7 @@ func init() { Register("DELETE", ue.CustomUriPCFUserM, ue.DeletePCFUserInfo, nil) //PCF User file Register("GET", ue.UriPCFUserFileExport, ue.GetUEInfoFileExportNF, nil) - Register("GET", ue.CustomUriPCFUserFileExport, ue.GetUEInfoFromNF, nil) Register("PUT", ue.UriPCFUserFileImport, ue.PutPCFUserInfo, nil) - Register("PUT", ue.CustomUriPCFUserFileImport, ue.PutPCFUserInfo, nil) // UE Number Register("GET", ue.UriUENum, ue.GetUENumFromNF, nil) @@ -289,6 +287,9 @@ func init() { Register("POST", cdr.UriSMFCDREvent, cdr.PostCDREventFromSMF, nil) Register("POST", cdr.CustomUriSMFCDREvent, cdr.PostCDREventFromSMF, nil) + // UE event 上报的UE事件 + Register("POST", event.UriUEEvent, event.PostUEEvent, nil) + // UE event AMF上报的UE事件, 无前缀给到Gin处理 //Register("POST", event.UriUEEvent, event.PostUEEventFromAMF, nil) diff --git a/lib/wsinfo/client.go b/lib/wsinfo/client.go deleted file mode 100644 index 36201cdd..00000000 --- a/lib/wsinfo/client.go +++ /dev/null @@ -1,45 +0,0 @@ -package wsinfo - -import ( - "github.com/gorilla/websocket" -) - -type Client struct { - ID string - Socket *websocket.Conn - Msg chan []byte -} - -func NewWsClient(ID string, socket *websocket.Conn) *Client { - return &Client{ - ID: ID, - Socket: socket, - Msg: make(chan []byte, 100), - } -} - -func (c *Client) Read() { - defer func() { - close(c.Msg) - }() - for { - _, message, err := c.Socket.ReadMessage() - if err != nil { - return - } - ProcessData(c, message) - } -} - -func (c *Client) Write() { - defer func() { - c.Socket.Close() - }() - for { - message, ok := <-c.Msg - if !ok { - return - } - _ = c.Socket.WriteMessage(websocket.TextMessage, message) - } -} diff --git a/lib/wsinfo/process_data.go b/lib/wsinfo/process_data.go deleted file mode 100644 index e19aa62f..00000000 --- a/lib/wsinfo/process_data.go +++ /dev/null @@ -1,382 +0,0 @@ -package wsinfo - -import ( - "encoding/json" - "fmt" - "sort" - "strings" - "sync" - "time" - - "be.ems/lib/log" - "github.com/shirou/gopsutil/v3/host" - "github.com/shirou/gopsutil/v3/net" - "github.com/shirou/gopsutil/v3/process" -) - -type WsInput struct { - Type string `json:"type"` - DownloadProgress - PsProcessConfig - SSHSessionConfig - NetConfig -} - -type DownloadProgress struct { - Keys []string `json:"keys"` -} - -type PsProcessConfig struct { - Pid int32 `json:"pid"` - Name string `json:"name"` - Username string `json:"username"` -} - -type SSHSessionConfig struct { - LoginUser string `json:"loginUser"` - LoginIP string `json:"loginIP"` -} - -type NetConfig struct { - Port uint32 `json:"port"` - ProcessName string `json:"processName"` - ProcessID int32 `json:"processID"` -} - -type PsProcessData struct { - PID int32 `json:"PID"` - Name string `json:"name"` - PPID int32 `json:"PPID"` - Username string `json:"username"` - Status string `json:"status"` - StartTime string `json:"startTime"` - NumThreads int32 `json:"numThreads"` - NumConnections int `json:"numConnections"` - CpuPercent string `json:"cpuPercent"` - - DiskRead string `json:"diskRead"` - DiskWrite string `json:"diskWrite"` - CmdLine string `json:"cmdLine"` - - Rss string `json:"rss"` - VMS string `json:"vms"` - HWM string `json:"hwm"` - Data string `json:"data"` - Stack string `json:"stack"` - Locked string `json:"locked"` - Swap string `json:"swap"` - - CpuValue float64 `json:"cpuValue"` - RssValue uint64 `json:"rssValue"` - - Envs []string `json:"envs"` - - OpenFiles []process.OpenFilesStat `json:"openFiles"` - Connects []processConnect `json:"connects"` -} - -type processConnect struct { - Type string `json:"type"` - Status string `json:"status"` - Laddr net.Addr `json:"localaddr"` - Raddr net.Addr `json:"remoteaddr"` - PID int32 `json:"PID"` - Name string `json:"name"` -} - -type ProcessConnects []processConnect - -func (p ProcessConnects) Len() int { - return len(p) -} - -func (p ProcessConnects) Less(i, j int) bool { - return p[i].PID < p[j].PID -} - -func (p ProcessConnects) Swap(i, j int) { - p[i], p[j] = p[j], p[i] -} - -type sshSession struct { - Username string `json:"username"` - PID int32 `json:"PID"` - Terminal string `json:"terminal"` - Host string `json:"host"` - LoginTime string `json:"loginTime"` -} - -func ProcessData(c *Client, inputMsg []byte) { - wsInput := &WsInput{} - err := json.Unmarshal(inputMsg, wsInput) - if err != nil { - log.Errorf("unmarshal wsInput error,err %s", err.Error()) - return - } - switch wsInput.Type { - case "ps": - res, err := getProcessData(wsInput.PsProcessConfig) - if err != nil { - return - } - c.Msg <- res - case "ssh": - res, err := getSSHSessions(wsInput.SSHSessionConfig) - if err != nil { - return - } - c.Msg <- res - case "net": - res, err := getNetConnections(wsInput.NetConfig) - if err != nil { - return - } - c.Msg <- res - } - -} - -type Process struct { - Total uint64 `json:"total"` - Written uint64 `json:"written"` - Percent float64 `json:"percent"` - Name string `json:"name"` -} - -const ( - b = uint64(1) - kb = 1024 * b - mb = 1024 * kb - gb = 1024 * mb -) - -func formatBytes(bytes uint64) string { - switch { - case bytes < kb: - return fmt.Sprintf("%dB", bytes) - case bytes < mb: - return fmt.Sprintf("%.2fKB", float64(bytes)/float64(kb)) - case bytes < gb: - return fmt.Sprintf("%.2fMB", float64(bytes)/float64(mb)) - default: - return fmt.Sprintf("%.2fGB", float64(bytes)/float64(gb)) - } -} - -func getProcessData(processConfig PsProcessConfig) (res []byte, err error) { - var processes []*process.Process - processes, err = process.Processes() - if err != nil { - return - } - - var ( - result []PsProcessData - resultMutex sync.Mutex - wg sync.WaitGroup - numWorkers = 4 - ) - - handleData := func(proc *process.Process) { - procData := PsProcessData{ - PID: proc.Pid, - } - if processConfig.Pid > 0 && processConfig.Pid != proc.Pid { - return - } - if procName, err := proc.Name(); err == nil { - procData.Name = procName - } else { - procData.Name = "" - } - if processConfig.Name != "" && !strings.Contains(procData.Name, processConfig.Name) { - return - } - if username, err := proc.Username(); err == nil { - procData.Username = username - } - if processConfig.Username != "" && !strings.Contains(procData.Username, processConfig.Username) { - return - } - procData.PPID, _ = proc.Ppid() - statusArray, _ := proc.Status() - if len(statusArray) > 0 { - procData.Status = strings.Join(statusArray, ",") - } - createTime, procErr := proc.CreateTime() - if procErr == nil { - t := time.Unix(createTime/1000, 0) - procData.StartTime = t.Format("2006-1-2 15:04:05") - } - procData.NumThreads, _ = proc.NumThreads() - connections, procErr := proc.Connections() - if procErr == nil { - procData.NumConnections = len(connections) - for _, conn := range connections { - if conn.Laddr.IP != "" || conn.Raddr.IP != "" { - procData.Connects = append(procData.Connects, processConnect{ - Status: conn.Status, - Laddr: conn.Laddr, - Raddr: conn.Raddr, - }) - } - } - } - procData.CpuValue, _ = proc.CPUPercent() - procData.CpuPercent = fmt.Sprintf("%.2f", procData.CpuValue) + "%" - menInfo, procErr := proc.MemoryInfo() - if procErr == nil { - procData.Rss = formatBytes(menInfo.RSS) - procData.RssValue = menInfo.RSS - procData.Data = formatBytes(menInfo.Data) - procData.VMS = formatBytes(menInfo.VMS) - procData.HWM = formatBytes(menInfo.HWM) - procData.Stack = formatBytes(menInfo.Stack) - procData.Locked = formatBytes(menInfo.Locked) - procData.Swap = formatBytes(menInfo.Swap) - } else { - procData.Rss = "--" - procData.Data = "--" - procData.VMS = "--" - procData.HWM = "--" - procData.Stack = "--" - procData.Locked = "--" - procData.Swap = "--" - - procData.RssValue = 0 - } - ioStat, procErr := proc.IOCounters() - if procErr == nil { - procData.DiskWrite = formatBytes(ioStat.WriteBytes) - procData.DiskRead = formatBytes(ioStat.ReadBytes) - } else { - procData.DiskWrite = "--" - procData.DiskRead = "--" - } - procData.CmdLine, _ = proc.Cmdline() - procData.OpenFiles, _ = proc.OpenFiles() - procData.Envs, _ = proc.Environ() - - resultMutex.Lock() - result = append(result, procData) - resultMutex.Unlock() - } - - chunkSize := (len(processes) + numWorkers - 1) / numWorkers - for i := 0; i < numWorkers; i++ { - wg.Add(1) - start := i * chunkSize - end := (i + 1) * chunkSize - if end > len(processes) { - end = len(processes) - } - - go func(start, end int) { - defer wg.Done() - for j := start; j < end; j++ { - handleData(processes[j]) - } - }(start, end) - } - - wg.Wait() - - sort.Slice(result, func(i, j int) bool { - return result[i].PID < result[j].PID - }) - res, err = json.Marshal(result) - return -} - -func getSSHSessions(config SSHSessionConfig) (res []byte, err error) { - var ( - result []sshSession - users []host.UserStat - processes []*process.Process - ) - processes, err = process.Processes() - if err != nil { - return - } - users, err = host.Users() - if err != nil { - return - } - for _, proc := range processes { - name, _ := proc.Name() - if name != "sshd" || proc.Pid == 0 { - continue - } - connections, _ := proc.Connections() - for _, conn := range connections { - for _, user := range users { - if user.Host == "" { - continue - } - if conn.Raddr.IP == user.Host { - if config.LoginUser != "" && !strings.Contains(user.User, config.LoginUser) { - continue - } - if config.LoginIP != "" && !strings.Contains(user.Host, config.LoginIP) { - continue - } - if terminal, err := proc.Cmdline(); err == nil { - if strings.Contains(terminal, user.Terminal) { - session := sshSession{ - Username: user.User, - Host: user.Host, - Terminal: user.Terminal, - PID: proc.Pid, - } - t := time.Unix(int64(user.Started), 0) - session.LoginTime = t.Format("2006-1-2 15:04:05") - result = append(result, session) - } - } - } - } - } - } - res, err = json.Marshal(result) - return -} - -var netTypes = [...]string{"tcp", "udp"} - -func getNetConnections(config NetConfig) (res []byte, err error) { - var ( - result []processConnect - proc *process.Process - ) - for _, netType := range netTypes { - connections, _ := net.Connections(netType) - if err == nil { - for _, conn := range connections { - if config.ProcessID > 0 && config.ProcessID != conn.Pid { - continue - } - proc, err = process.NewProcess(conn.Pid) - if err == nil { - name, _ := proc.Name() - if name != "" && config.ProcessName != "" && !strings.Contains(name, config.ProcessName) { - continue - } - if config.Port > 0 && config.Port != conn.Laddr.Port && config.Port != conn.Raddr.Port { - continue - } - result = append(result, processConnect{ - Type: netType, - Status: conn.Status, - Laddr: conn.Laddr, - Raddr: conn.Raddr, - PID: conn.Pid, - Name: name, - }) - } - - } - } - } - res, err = json.Marshal(result) - return -} diff --git a/makefile b/makefile index f6bcb5c9..53660a48 100644 --- a/makefile +++ b/makefile @@ -64,23 +64,23 @@ endif .PHONY: all $(RESTAGENT) $(CRONTASK) $(SshSvcBin) $(CapTraceBin) $(Data2htmlBin) all: $(RESTAGENT) $(CRONTASK) $(SshSvcBin) $(CapTraceBin) $(Data2htmlBin) cd $(RestagentDir) - go build -o $(RESTAGENT) -v -ldflags "-X 'be.ems/lib/conifg.Version=$(RelVer)' \ + go build -o $(RESTAGENT) -v -ldflags "-s -w -X 'be.ems/lib/conifg.Version=$(RelVer)' \ -X '$(LibDir)/conifg.BuildTime=`date`' \ -X '$(LibDir)/conifg.GoVer=`go version`'" cd $(CrontaskDir) - go build -o $(CRONTASK) -v -ldflags "-X '$(LibDir)/conifg.Version=$(RelVer)' \ + go build -o $(CRONTASK) -v -ldflags "-s -w -X '$(LibDir)/conifg.Version=$(RelVer)' \ -X '$(LibDir)/conifg.BuildTime=`date`' \ -X '$(LibDir)/conifg.GoVer=`go version`'" cd $(SshSvcDir) - go build -o $(SshSvcBin) -v -ldflags "-X '$(LibDir)/conifg.Version=$(RelVer)' \ + go build -o $(SshSvcBin) -v -ldflags "-s -w -X '$(LibDir)/conifg.Version=$(RelVer)' \ -X '$(LibDir)/conifg.BuildTime=`date`' \ -X '$(LibDir)/conifg.GoVer=`go version`'" cd $(CapTraceDir) - go build -o $(CapTraceBin) -v -ldflags "-X '$(LibDir)/conifg.Version=$(RelVer)' \ + go build -o $(CapTraceBin) -v -ldflags "-s -w -X '$(LibDir)/conifg.Version=$(RelVer)' \ -X '$(LibDir)/conifg.BuildTime=`date`' \ -X '$(LibDir)/conifg.GoVer=`go version`'" cd $(Data2htmlDir) - go build -o $(Data2htmlBin) -v -ldflags "-X '$(LibDir)/conifg.Version=$(RelVer)' \ + go build -o $(Data2htmlBin) -v -ldflags "-s -w -X '$(LibDir)/conifg.Version=$(RelVer)' \ -X '$(LibDir)/conifg.BuildTime=`date`' \ -X '$(LibDir)/conifg.GoVer=`go version`'" @@ -128,7 +128,7 @@ deb: $(BINNAME) chmod +x $(DebBuildDir)/usr/local/omc/bin/* #sed -i.bak 's/YYYYMMDD/$(shell date +"%Y%m%d")/g' $(DebBuildDir)/DEBIAN/control sed -i 's/YYYYMMDD/$(shell date +"%Y%m%d")/g' $(DebBuildDir)/DEBIAN/control - perl -0777 -i -pe 's/ne:\n user: root/ne:\n user: manager/g' $(DebBuildDir)/usr/local/omc/etc/default/restconf.yaml + perl -0777 -i -pe 's/ne:\n user: root/ne:\n user: omcuser/g' $(DebBuildDir)/usr/local/omc/etc/default/restconf.yaml dpkg -b $(DebBuildDir) $(ReleaseDebs)/$(DebPkgFile) rpm: $(BINNAME) diff --git a/misc/importdb.sh b/misc/importdb.sh index c1d487ee..0f823177 100644 --- a/misc/importdb.sh +++ b/misc/importdb.sh @@ -2,6 +2,7 @@ USER="root" PASSWORD="1000omc@kp!" +HOST="127.0.0.1" PORT="33066" DBNAME="tenants_db" UpgradeSQLDir=/usr/local/omc/etc/db/upgrade @@ -16,7 +17,7 @@ case "$1" in echo "Upgrade database ${DBNAME}" for SQL in ${UpgradeSQLDir}/*.sql; do echo -n "Execute SQL script: ${SQL} ..." - mysql -u${USER} -p${PASSWORD} -P ${PORT} --protocol tcp -D ${DBNAME} < ${SQL}; + mysql -u${USER} -p${PASSWORD} -P ${PORT} -h ${HOST} --protocol tcp -D ${DBNAME} < ${SQL}; if [ $? = 0 ]; then echo "done" fi @@ -27,7 +28,7 @@ case "$1" in echo "Upgrade to vue3 database ${DBNAME}" for SQL in ${Upgvue3SQLDir}/*.sql; do echo -n "Execute SQL script: ${SQL} ..." - mysql -u${USER} -p${PASSWORD} -P ${PORT} --protocol tcp -D ${DBNAME} < ${SQL}; + mysql -u${USER} -p${PASSWORD} -P ${PORT} -h ${HOST} --protocol tcp -D ${DBNAME} < ${SQL}; if [ $? = 0 ]; then echo "done" fi @@ -36,12 +37,12 @@ case "$1" in install) echo "Drop database ${DBNAME} ...!!!" - mysql -u${USER} -p${PASSWORD} -P $PORT --protocol tcp -e "${drop_db_sql}" + mysql -u${USER} -p${PASSWORD} -P $PORT -h ${HOST} --protocol tcp -e "${drop_db_sql}" echo "Create database ${DBNAME} if not exist" - mysql -u${USER} -p${PASSWORD} -P $PORT --protocol tcp -e "${create_db_sql}" + mysql -u${USER} -p${PASSWORD} -P $PORT -h ${HOST} --protocol tcp -e "${create_db_sql}" for SQL in ${InstallSQLDir}/*.sql; do echo -n "Execute SQL script: ${SQL} ..." - mysql -u${USER} -p${PASSWORD} -P ${PORT} --protocol tcp -D ${DBNAME} < ${SQL}; + mysql -u${USER} -p${PASSWORD} -P ${PORT} -h ${HOST} --protocol tcp -D ${DBNAME} < ${SQL}; if [ $? = 0 ]; then echo "done" fi @@ -60,7 +61,7 @@ case "$1" in for SQL in ${UpgradeSQLDir}/*.sql; do echo -n "Execute SQL script: ${SQL} ..." - mysql -u${USER} -p${PASSWORD} -P ${PORT} --protocol tcp -D ${DBNAME} < ${SQL}; + mysql -u${USER} -p${PASSWORD} -P ${PORT} -h ${HOST} --protocol tcp -D ${DBNAME} < ${SQL}; if [ $? = 0 ]; then echo "done" fi @@ -75,7 +76,7 @@ case "$1" in for SQL in ${Upgvue3SQLDir}/*.sql; do echo -n "Execute SQL script: ${SQL} ..." - mysql -u${USER} -p${PASSWORD} -P ${PORT} --protocol tcp -D ${DBNAME} < ${SQL}; + mysql -u${USER} -p${PASSWORD} -P ${PORT} -h ${HOST} --protocol tcp -D ${DBNAME} < ${SQL}; if [ $? = 0 ]; then echo "done" fi @@ -87,13 +88,13 @@ case "$1" in [iI][nN][sS][tT][aA][lL][lL]|[iI]) echo "Drop database ${DBNAME} ...!!!" - mysql -u${USER} -p${PASSWORD} -P $PORT --protocol tcp -e "${drop_db_sql}" + mysql -u${USER} -p${PASSWORD} -P $PORT -h ${HOST} --protocol tcp -e "${drop_db_sql}" echo "Create database ${DBNAME} if not exist" - mysql -u${USER} -p${PASSWORD} -P $PORT --protocol tcp -e "${create_db_sql}" + mysql -u${USER} -p${PASSWORD} -P $PORT -h ${HOST} --protocol tcp -e "${create_db_sql}" for SQL in ${InstallSQLDir}/*.sql; do echo -n "Execute SQL script: ${SQL} ..." - mysql -u${USER} -p${PASSWORD} -P ${PORT} --protocol tcp -D ${DBNAME} < ${SQL}; + mysql -u${USER} -p${PASSWORD} -P ${PORT} -h ${HOST} --protocol tcp -D ${DBNAME} < ${SQL}; if [ $? = 0 ]; then echo "done" fi @@ -116,12 +117,18 @@ case "$1" in esac # create kpi_report table with ne_type, exp: kpi_report_amf -ne_types=$(mysql -u${USER} -p${PASSWORD} -P ${PORT} --protocol tcp -D ${DBNAME} -se "SELECT DISTINCT LOWER(ne_type) FROM kpi_title") +ne_types=$(mysql -u${USER} -p${PASSWORD} -P ${PORT} -h ${HOST} --protocol tcp -D ${DBNAME} -se "SELECT DISTINCT LOWER(ne_type) FROM kpi_title") for ne_type in ${ne_types}; do TABLE_NAME="kpi_report_${ne_type}" SQL="CREATE TABLE IF NOT EXISTS ${TABLE_NAME} LIKE \`kpi_report\`;" echo -n "Create table: ${TABLE_NAME} ..." - mysql -u${USER} -p${PASSWORD} -P ${PORT} --protocol tcp -D ${DBNAME} -e "${SQL}" + mysql -u${USER} -p${PASSWORD} -P ${PORT} -h ${HOST} --protocol tcp -D ${DBNAME} -e "${SQL}" + if [ $? = 0 ]; then + echo "done" + fi + SQL="ALTER TABLE ${TABLE_NAME} ADD INDEX IF NOT EXISTS \`idx_timestamp\`(\`created_at\`) USING BTREE, ADD INDEX IF NOT EXISTS \`idx_uid_datetime\`(\`rm_uid\`, \`date\`, \`start_time\`) USING BTREE;" + echo -n "Create index of ${TABLE_NAME} ..." + mysql -u${USER} -p${PASSWORD} -P ${PORT} -h ${HOST} --protocol tcp -D ${DBNAME} -e "${SQL}" if [ $? = 0 ]; then echo "done" fi diff --git a/misc/setomc.sh b/misc/setomc.sh index ecbca8bd..c7745c87 100644 --- a/misc/setomc.sh +++ b/misc/setomc.sh @@ -1,5 +1,8 @@ #!/bin/bash +# Read the value of the variable from file +source /usr/local/omc/etc/omc.conf + C_ARG_LOWER="agt" C_ARG_UPPER="AGT" M_ARG_LOWER="*" @@ -10,9 +13,21 @@ check_args() { c) C_ARG_LOWER=$(echo $OPTARG | tr '[:upper:]' '[:lower:]') C_ARG_UPPER=$(echo $OPTARG | tr '[:lower:]' '[:upper:]') + # Modifying Script Variables + if [ "${C_ARG_LOWER}" == "ba" ]; then + C_ARG_UPPER="BA" + sed -i 's/VENDORS=.*/VENDORS=BA/' /usr/local/omc/etc/omc.conf + elif [ "${C_ARG_LOWER}" == "agt" ]; then + C_ARG_UPPER="AGT" + sed -i 's/VENDORS=.*/VENDORS=AGT/' /usr/local/omc/etc/omc.conf + fi ;; m) M_ARG=$(echo $OPTARG | tr '[:upper:]' '[:lower:]') + if [ "${VENDORS}" == "BA" ]; then + C_ARG_LOWER="ba" + C_ARG_UPPER="BA" + fi ;; \?) echo "Invalid option: -$OPTARG" >&2 @@ -50,8 +65,8 @@ case "${M_ARG}" in done cp -rf ${CustomizedDir}/logo/* ${OMCStaticDir}/logo cp -rf ${CustomizedDir}/doc/* ${OMCStaticDir}/helpDoc - perl -0777 -i -pe 's/manager/bluearcus/g' ${OMCRootDir}/etc/default/restconf.yaml - perl -0777 -i -pe 's/manager/bluearcus/g' ${OMCBinDir}/nehosts + #perl -0777 -i -pe 's/omcuser/bluearcus/g' ${OMCRootDir}/etc/default/restconf.yaml + #perl -0777 -i -pe 's/omcuser/bluearcus/g' ${OMCBinDir}/nehosts fi ;; upgrade | upgvue3) diff --git a/mkpkg.sh b/mkpkg.sh index 04cb7f5a..0f2ad864 100644 --- a/mkpkg.sh +++ b/mkpkg.sh @@ -57,7 +57,7 @@ case "$1" in md5sum $DebPkgName >omc-md5sum.txt ;; *) - echo "mkpkg" - echo "Usage: $0 rpm|deb" + echo "make omc package" + echo "Usage: $0 rpm|deb " ;; esac \ No newline at end of file diff --git a/restagent/config/config.go b/restagent/config/config.go index 181cbefd..59585c83 100644 --- a/restagent/config/config.go +++ b/restagent/config/config.go @@ -177,8 +177,8 @@ type MMLParam struct { Port2 int `yaml:"port2"` Sleep int64 `yaml:"sleep"` DeadLine int64 `yaml:"deadLine"` - SizeRow byte `yaml:"sizeRow"` - SizeCol byte `yaml:"sizeCol"` + SizeRow int16 `yaml:"sizeRow"` + SizeCol int16 `yaml:"sizeCol"` BufferSize int `yaml:"bufferSize"` User string `yaml:"user"` Password string `ymal:"password"` @@ -226,8 +226,8 @@ func NewYamlConfig() YamlConfig { ConnParam: "charset=utf8mb4&collation=utf8mb4_general_ci&parseTime=True&interpolateParams=True", }, MML: MMLParam{ - SizeRow: 100, - SizeCol: 128, + SizeRow: 200, + SizeCol: 120, BufferSize: 65535, }, Alarm: AlarmConfig{ diff --git a/restagent/etc/restconf-t.yaml b/restagent/etc/restconf-t.yaml index 4be33b7c..b11dabbf 100644 --- a/restagent/etc/restconf-t.yaml +++ b/restagent/etc/restconf-t.yaml @@ -73,13 +73,12 @@ mml: port2: 5002 sleep: 200 deadLine: 10 - sizeRow: 100 + sizeRow: 600 sizeCol: 128 bufferSize: 65535 user: admin password: admin mmlHome: ./mmlhome - upload: /home/manager # NE config ne: diff --git a/restagent/makefile b/restagent/makefile index a725f74a..d990e872 100644 --- a/restagent/makefile +++ b/restagent/makefile @@ -14,7 +14,7 @@ BINNAME = restagent .PHONY: build $(BINNAME) build $(BINNAME): - go build -o $(BINNAME) -v -ldflags "-X '$(LIBDIR)/global.Version=$(VERSION)' \ + go build -o $(BINNAME) -v -ldflags "-s -w -X '$(LIBDIR)/global.Version=$(VERSION)' \ -X '$(LIBDIR)/global.BuildTime=`date`' \ -X '$(LIBDIR)/global.GoVer=`go version`'" diff --git a/restagent/restagent.go b/restagent/restagent.go index ec8afd3c..734cf30e 100644 --- a/restagent/restagent.go +++ b/restagent/restagent.go @@ -249,7 +249,7 @@ func main() { uriGroup := app.Group(config.UriPrefix) uriGroup.Any("/*any", gin.WrapH(routes.NewRouter())) // AMF上报的UE事件, 无前缀,暂时特殊处理 - app.POST(event.UriUEEvent, event.PostUEEventFromAMF) + app.POST(event.UriUEEventAMF, event.PostUEEventFromAMF) var listenLocalhost bool = false for _, rest := range conf.Rest { diff --git a/src/framework/middleware/collectlogs/operate_log.go b/src/framework/middleware/collectlogs/operate_log.go index b4cadc79..825980fd 100644 --- a/src/framework/middleware/collectlogs/operate_log.go +++ b/src/framework/middleware/collectlogs/operate_log.go @@ -8,6 +8,7 @@ import ( "time" "be.ems/src/framework/constants/common" + tokenConstants "be.ems/src/framework/constants/token" "be.ems/src/framework/i18n" "be.ems/src/framework/utils/ctx" "be.ems/src/framework/utils/parse" @@ -180,6 +181,8 @@ var maskProperties []string = []string{ "oldPassword", "newPassword", "confirmPassword", + tokenConstants.RESPONSE_FIELD, + tokenConstants.ACCESS_TOKEN, } // processSensitiveFields 处理敏感属性字段 diff --git a/src/framework/middleware/pre_authorize.go b/src/framework/middleware/pre_authorize.go index d840a9f3..588ad292 100644 --- a/src/framework/middleware/pre_authorize.go +++ b/src/framework/middleware/pre_authorize.go @@ -20,6 +20,7 @@ var URL_WHITE_LIST = []string{ "/systemState", "/omcNeConfig", "/cdrEvent", + "/ueEvent", "/upload-ue", "/oauth/token", } diff --git a/src/framework/utils/ctx/ctx.go b/src/framework/utils/ctx/ctx.go index fd7503c3..3174e5dc 100644 --- a/src/framework/utils/ctx/ctx.go +++ b/src/framework/utils/ctx/ctx.go @@ -212,6 +212,11 @@ func LoginUserToDataScopeSQL(c *gin.Context, deptAlias string, userAlias string) conditions = append(conditions, sql) } + if roledatascope.DEPT == dataScope { + sql := fmt.Sprintf(`%s.dept_id = '%s'`, deptAlias, userInfo.DeptID) + conditions = append(conditions, sql) + } + if roledatascope.DEPT_AND_CHILD == dataScope { sql := fmt.Sprintf(`%s.dept_id IN ( SELECT dept_id FROM sys_dept WHERE dept_id = '%s' or find_in_set('%s' , ancestors ) )`, deptAlias, userInfo.DeptID, userInfo.DeptID) conditions = append(conditions, sql) @@ -220,7 +225,7 @@ func LoginUserToDataScopeSQL(c *gin.Context, deptAlias string, userAlias string) if roledatascope.SELF == dataScope { // 数据权限为仅本人且没有userAlias别名不查询任何数据 if userAlias == "" { - sql := fmt.Sprintf(`%s.dept_id = '0'`, deptAlias) + sql := fmt.Sprintf(`%s.parent_id = '0'`, deptAlias) conditions = append(conditions, sql) } else { sql := fmt.Sprintf(`%s.user_id = '%s'`, userAlias, userInfo.UserID) diff --git a/src/framework/utils/date/date.go b/src/framework/utils/date/date.go index 84ae33d4..35cf339f 100644 --- a/src/framework/utils/date/date.go +++ b/src/framework/utils/date/date.go @@ -48,7 +48,14 @@ func ParseDateToStr(date any, formatStr string) string { if v == 0 { return "" } - t = time.UnixMilli(v) + if v > 9999999999 { + t = time.UnixMilli(v) + } else if v > 999999999 { + t = time.Unix(v, 0) + } else { + logger.Infof("utils ParseDateToStr err %v", "Invalid timestamp") + return "" + } case string: parsedTime, err := time.Parse(formatStr, v) if err != nil { diff --git a/src/framework/utils/repo/repo.go b/src/framework/utils/repo/repo.go index 5bd59fe9..6e5e82f3 100644 --- a/src/framework/utils/repo/repo.go +++ b/src/framework/utils/repo/repo.go @@ -66,12 +66,12 @@ func SetFieldValue(obj any, fieldName string, value any) { } fieldValue.SetFloat(floatValue) case reflect.Struct: - fmt.Printf("%s 时间解析 %s %v \n", fieldName, fieldValue.Type(), value) + fmt.Printf("%s time resolution %s %v \n", fieldName, fieldValue.Type(), value) if fieldValue.Type() == reflect.TypeOf(time.Time{}) && value != nil { // 解析 value 并转换为 time.Time 类型 parsedTime, err := time.Parse("2006-01-02 15:04:05 +0800 CST", fmt.Sprintf("%v", value)) if err != nil { - fmt.Println("时间解析出错:", err) + fmt.Println("Time resolution error:", err) } else { // 设置字段的值 fieldValue.Set(reflect.ValueOf(parsedTime)) diff --git a/src/framework/utils/ssh/files.go b/src/framework/utils/ssh/files.go index 59eefe51..d9d5f425 100644 --- a/src/framework/utils/ssh/files.go +++ b/src/framework/utils/ssh/files.go @@ -4,7 +4,6 @@ import ( "fmt" "strings" - "be.ems/src/framework/config" "be.ems/src/framework/logger" "be.ems/src/framework/utils/cmd" "be.ems/src/framework/utils/parse" @@ -23,35 +22,31 @@ type FileListRow struct { } // 文件列表 -// neIp 网元IP空字符串为本地 // search 文件名后模糊* // // return 目录大小,行记录,异常 -func FileList(path, neIp, search string) (string, []FileListRow, error) { +func FileList(sshClient *ConnSSH, path, search string) (string, []FileListRow, error) { totalSize := "" var rows []FileListRow rowStr := "" // 发送命令 - searchStr := "" + searchStr := "*" if search != "" { - searchStr = search + "*" + searchStr = search + searchStr } - pathStr := fmt.Sprintf("cd %s \n", path) - cmdStr := fmt.Sprintf("ls -lht --time-style=+%%s %s \n", searchStr) + cmdStr := fmt.Sprintf("cd %s && ls -lthd --time-style=+%%s %s", path, searchStr) - // 是否远程读取 - if neIp != "" { - usernameNe := config.Get("ne.user").(string) // 网元统一用户 - sshHost := fmt.Sprintf("%s@%s", usernameNe, neIp) - resultStr, err := cmd.ExecWithCheck("ssh", sshHost, pathStr, cmdStr) + // 是否远程客户端读取 + if sshClient == nil { + resultStr, err := cmd.Execf(cmdStr) if err != nil { logger.Errorf("Ne FileList Path: %s, Search: %s, Error:%s", path, search, err.Error()) return totalSize, rows, err } rowStr = resultStr } else { - resultStr, err := cmd.Execf(pathStr, cmdStr) + resultStr, err := sshClient.RunCMD(cmdStr) if err != nil { logger.Errorf("Ne FileList Path: %s, Search: %s, Error:%s", path, search, err.Error()) return totalSize, rows, err diff --git a/src/framework/utils/ssh/scp.go b/src/framework/utils/ssh/scp.go deleted file mode 100644 index 33beb538..00000000 --- a/src/framework/utils/ssh/scp.go +++ /dev/null @@ -1,55 +0,0 @@ -package ssh - -import ( - "fmt" - "os" - "os/exec" - "path/filepath" - "time" - - "be.ems/src/framework/config" - "be.ems/src/framework/logger" -) - -// 网元NE 文件复制到远程文件 -func FileSCPLocalToNe(neIp, localPath, nePath string) error { - usernameNe := config.Get("ne.user").(string) - // scp /path/to/local/file.txt user@remote-server:/path/to/remote/directory/ - neDir := fmt.Sprintf("%s@%s:%s", usernameNe, neIp, nePath) - cmd := exec.Command("scp", "-r", localPath, neDir) - output, err := cmd.CombinedOutput() - if err != nil { - logger.Errorf("FileSCPLocalToNe %s => %s", output, err.Error()) - return err - } - return nil -} - -// 网元NE 远程文件复制到本地文件 -func FileSCPNeToLocal(neIp, nePath, localPath string) error { - // 确保文件夹路径存在 - if err := os.MkdirAll(filepath.Dir(localPath), 0775); err != nil { - logger.Errorf("FileSCPNeToLocal MkdirAll err %v", err) - return err - } - // 如果目标文件已经存在,先将目标文件重命名 - if info, err := os.Stat(localPath); err == nil && !info.IsDir() { - ext := filepath.Ext(localPath) - name := localPath[0 : len(localPath)-len(ext)] - newName := fmt.Sprintf("%s-%s%s", name, time.Now().Format("20060102_150405"), ext) - err := os.Rename(localPath, newName) - if err != nil { - return err - } - } - usernameNe := config.Get("ne.user").(string) - // scp user@remote-server:/path/to/remote/directory/ /path/to/local/file.txt - neDir := fmt.Sprintf("%s@%s:%s", usernameNe, neIp, nePath) - cmd := exec.Command("scp", "-r", neDir, localPath) - output, err := cmd.CombinedOutput() - if err != nil { - logger.Errorf("FileSCPNeToLocal %s => %s", output, err.Error()) - return err - } - return nil -} diff --git a/src/framework/utils/ssh/sftp.go b/src/framework/utils/ssh/sftp.go new file mode 100644 index 00000000..33367337 --- /dev/null +++ b/src/framework/utils/ssh/sftp.go @@ -0,0 +1,202 @@ +package ssh + +import ( + "io" + "os" + "path/filepath" + + "be.ems/src/framework/logger" + gosftp "github.com/pkg/sftp" +) + +// SSHClientSFTP SSH客户端SFTP对象 +type SSHClientSFTP struct { + Client *gosftp.Client +} + +// Close 关闭会话 +func (s *SSHClientSFTP) Close() { + if s.Client != nil { + s.Client.Close() + } +} + +// CopyDirRemoteToLocal 复制目录-远程到本地 +func (s *SSHClientSFTP) CopyDirRemoteToLocal(remoteDir, localDir string) error { + // 列出远程目录中的文件和子目录 + remoteFiles, err := s.Client.ReadDir(remoteDir) + if err != nil { + logger.Errorf("CopyDirRemoteToLocal failed to reading remote directory %s: => %s", remoteDir, err.Error()) + return err + } + + // 创建本地目录 + err = os.MkdirAll(localDir, 0775) + if err != nil { + logger.Errorf("CopyDirRemoteToLocal failed to creating local directory %s: => %s", localDir, err.Error()) + return err + } + + // 遍历远程文件和子目录并复制到本地 + for _, remoteFile := range remoteFiles { + remotePath := filepath.Join(remoteDir, remoteFile.Name()) + localPath := filepath.Join(localDir, remoteFile.Name()) + + if remoteFile.IsDir() { + // 如果是子目录,则递归复制子目录 + err = s.CopyDirRemoteToLocal(remotePath, localPath) + if err != nil { + logger.Errorf("CopyDirRemoteToLocal failed to copying remote directory %s: => %s", remotePath, err.Error()) + continue + } + } else { + // 如果是文件,则复制文件内容 + remoteFile, err := s.Client.Open(remotePath) + if err != nil { + logger.Errorf("CopyDirRemoteToLocal failed to opening remote file %s: => %s", remotePath, err.Error()) + continue + } + defer remoteFile.Close() + + localFile, err := os.Create(localPath) + if err != nil { + logger.Errorf("CopyDirRemoteToLocal failed to creating local file %s: => %s", localPath, err.Error()) + continue + } + defer localFile.Close() + + _, err = io.Copy(localFile, remoteFile) + if err != nil { + logger.Errorf("CopyDirRemoteToLocal failed to copying file contents from %s to %s: => %s", remotePath, localPath, err.Error()) + continue + } + } + } + return nil +} + +// CopyDirRemoteToLocal 复制目录-本地到远程 +func (s *SSHClientSFTP) CopyDirLocalToRemote(localDir, remoteDir string) error { + // 创建远程目录 + err := s.Client.MkdirAll(remoteDir) + if err != nil { + logger.Errorf("CopyDirLocalToRemote failed to creating remote directory %s: => %s", remoteDir, err.Error()) + return err + } + + // 遍历本地目录中的文件和子目录并复制到远程 + err = filepath.Walk(localDir, func(localPath string, info os.FileInfo, err error) error { + if err != nil { + return err + } + + // 生成远程路径 + remotePath := filepath.Join(remoteDir, localPath[len(localDir):]) + + if info.IsDir() { + // 如果是子目录,则创建远程目录 + err := s.Client.MkdirAll(remotePath) + if err != nil { + logger.Errorf("CopyDirLocalToRemote failed to creating remote directory %s: => %s", remotePath, err.Error()) + return nil + } + } else { + // 如果是文件,则复制文件内容 + localFile, err := os.Open(localPath) + if err != nil { + logger.Errorf("CopyDirLocalToRemote failed to opening local file %s: => %s", localPath, err.Error()) + return nil + } + defer localFile.Close() + + remoteFile, err := s.Client.Create(remotePath) + if err != nil { + logger.Errorf("CopyDirLocalToRemote failed to creating remote file %s: => %s", remotePath, err.Error()) + return nil + } + defer remoteFile.Close() + + _, err = io.Copy(remoteFile, localFile) + if err != nil { + logger.Errorf("CopyDirLocalToRemote failed to copying file contents from %s to %s: => %s", localPath, remotePath, err.Error()) + return nil + } + } + + return nil + }) + if err != nil { + logger.Errorf("CopyDirLocalToRemote failed to walking local directory: => %s", err.Error()) + return err + } + return nil +} + +// CopyDirRemoteToLocal 复制文件-远程到本地 +func (s *SSHClientSFTP) CopyFileRemoteToLocal(remotePath, localPath string) error { + // 打开远程文件 + remoteFile, err := s.Client.Open(remotePath) + if err != nil { + logger.Errorf("CopyFileRemoteToLocal failed to opening remote file: => %s", err.Error()) + return err + } + defer remoteFile.Close() + + if err := os.MkdirAll(filepath.Dir(localPath), 0775); err != nil { + return err + } + + // 如果目标文件已经存在,先将目标文件重命名 + // if info, err := os.Stat(localPath); err == nil && !info.IsDir() { + // ext := filepath.Ext(localPath) + // name := localPath[0 : len(localPath)-len(ext)] + // newName := fmt.Sprintf("%s-%s%s", name, time.Now().Format("20060102_150405"), ext) + // err := os.Rename(localPath, newName) + // if err != nil { + // return err + // } + // } + + // 创建本地文件 + localFile, err := os.Create(localPath) + if err != nil { + logger.Errorf("CopyFileRemoteToLocal failed to creating local file: => %s", err.Error()) + return err + } + defer localFile.Close() + + // 复制文件内容 + _, err = io.Copy(localFile, remoteFile) + if err != nil { + logger.Errorf("CopyFileRemoteToLocal failed to copying contents: => %s", err.Error()) + return err + } + return nil +} + +// CopyDirRemoteToLocal 复制文件-本地到远程 +func (s *SSHClientSFTP) CopyFileLocalToRemote(localPath, remotePath string) error { + // 打开本地文件 + localFile, err := os.Open(localPath) + if err != nil { + logger.Errorf("CopyFileLocalToRemote failed to opening local file: => %s", err.Error()) + return err + } + defer localFile.Close() + + // 创建远程文件 + remoteFile, err := s.Client.Create(remotePath) + if err != nil { + logger.Errorf("CopyFileLocalToRemote failed to creating remote file: => %s", err.Error()) + return err + } + defer remoteFile.Close() + + // 复制文件内容 + _, err = io.Copy(remoteFile, localFile) + if err != nil { + logger.Errorf("CopyFileLocalToRemote failed to copying contents: => %s", err.Error()) + return err + } + return nil +} diff --git a/src/framework/utils/ssh/ssh.go b/src/framework/utils/ssh/ssh.go index eaf5c3d9..29a5fb70 100644 --- a/src/framework/utils/ssh/ssh.go +++ b/src/framework/utils/ssh/ssh.go @@ -1,14 +1,10 @@ package ssh import ( - "bytes" "fmt" - "io" "os" "os/user" - "path/filepath" "strings" - "sync" "time" "be.ems/src/framework/logger" @@ -89,24 +85,6 @@ func (c *ConnSSH) Close() { } } -// NewClientByLocalPrivate 创建SSH客户端-本地私钥(~/.ssh/id_rsa)直连 -// -// ssh.ConnSSH{ -// User: "user", -// Addr: "192.168.x.x", -// Port: body.Port, -// } -func (c *ConnSSH) NewClientByLocalPrivate() (*ConnSSH, error) { - c.Port = 22 - c.AuthMode = "1" - privateKey, err := c.CurrentUserRsaKey(false) - if err != nil { - return nil, err - } - c.PrivateKey = privateKey - return c.NewClient() -} - // RunCMD 执行单次命令 func (c *ConnSSH) RunCMD(cmd string) (string, error) { if c.Client == nil { @@ -128,57 +106,6 @@ func (c *ConnSSH) RunCMD(cmd string) (string, error) { return c.LastResult, err } -// SendToAuthorizedKeys 发送当前用户私钥到远程服务器进行授权密钥 -func (c *ConnSSH) SendToAuthorizedKeys() error { - publicKey, err := c.CurrentUserRsaKey(true) - if err != nil { - return err - } - authorizedKeysEntry := fmt.Sprintln(strings.TrimSpace(publicKey)) - cmdStrArr := []string{ - fmt.Sprintf("sudo mkdir -p /home/%s/.ssh && sudo chown %s:%s /home/%s/.ssh && sudo chmod 700 /home/%s/.ssh", c.User, c.User, c.User, c.User, c.User), - fmt.Sprintf("sudo touch /home/%s/.ssh/authorized_keys && sudo chown %s:%s /home/%s/.ssh/authorized_keys && sudo chmod 600 /home/%s/.ssh/authorized_keys", c.User, c.User, c.User, c.User, c.User), - fmt.Sprintf("echo '%s' | sudo tee -a /home/%s/.ssh/authorized_keys", authorizedKeysEntry, c.User), - } - _, err = c.RunCMD(strings.Join(cmdStrArr, " && ")) - if err != nil { - logger.Errorf("SendAuthorizedKeys echo err %s", err.Error()) - return err - } - return nil -} - -// CurrentUserRsaKey 当前用户OMC使用的RSA私钥 -// 默认读取私钥 -// ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa -// ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub -func (c *ConnSSH) CurrentUserRsaKey(publicKey bool) (string, error) { - usr, err := user.Current() - if err != nil { - logger.Errorf("CurrentUserRsaKey get => %s", err.Error()) - return "", err - } - - // 是否存在私钥并创建 - keyPath := fmt.Sprintf("%s/.ssh/id_rsa", usr.HomeDir) - if _, err := os.Stat(keyPath); err != nil { - if _, err := cmd.ExecWithCheck("ssh-keygen", "-t", "rsa", "-P", "", "-f", keyPath); err != nil { - logger.Errorf("CurrentUserPrivateKey ssh-keygen [%s] rsa => %s", usr.Username, err.Error()) - } - } - - // 读取用户默认的文件 - if publicKey { - keyPath = keyPath + ".pub" - } - key, err := os.ReadFile(keyPath) - if err != nil { - logger.Errorf("CurrentUserRsaKey [%s] read => %s", usr.Username, err.Error()) - return "", fmt.Errorf("read file %s fail", keyPath) - } - return string(key), nil -} - // NewClientSession 创建SSH客户端会话对象 func (c *ConnSSH) NewClientSession(cols, rows int) (*SSHClientSession, error) { sshSession, err := c.Client.NewSession() @@ -216,69 +143,6 @@ func (c *ConnSSH) NewClientSession(cols, rows int) (*SSHClientSession, error) { }, nil } -// SSHClientSession SSH客户端会话对象 -type SSHClientSession struct { - Stdin io.WriteCloser - Stdout *singleWriter - Session *gossh.Session -} - -// Close 关闭会话 -func (s *SSHClientSession) Close() { - if s.Stdin != nil { - s.Stdin.Close() - } - if s.Stdout != nil { - s.Stdout = nil - } - if s.Session != nil { - s.Session.Close() - } -} - -// Write 写入命令 回车(\n)才会执行 -func (s *SSHClientSession) Write(cmd string) (int, error) { - if s.Stdin == nil { - return 0, fmt.Errorf("ssh client session is nil to content write failed") - } - return s.Stdin.Write([]byte(cmd)) -} - -// Read 读取结果 -func (s *SSHClientSession) Read() []byte { - if s.Stdout == nil { - return []byte{} - } - bs := s.Stdout.Bytes() - if len(bs) > 0 { - s.Stdout.Reset() - return bs - } - return []byte{} -} - -// singleWriter SSH客户端会话消息 -type singleWriter struct { - b bytes.Buffer - mu sync.Mutex -} - -func (w *singleWriter) Write(p []byte) (int, error) { - w.mu.Lock() - defer w.mu.Unlock() - return w.b.Write(p) -} -func (w *singleWriter) Bytes() []byte { - w.mu.Lock() - defer w.mu.Unlock() - return w.b.Bytes() -} -func (w *singleWriter) Reset() { - w.mu.Lock() - defer w.mu.Unlock() - w.b.Reset() -} - // NewClientSFTP 创建SSH客户端SFTP对象 func (c *ConnSSH) NewClientSFTP() (*SSHClientSFTP, error) { sftpClient, err := gosftp.NewClient(c.Client) @@ -292,193 +156,70 @@ func (c *ConnSSH) NewClientSFTP() (*SSHClientSFTP, error) { }, nil } -// SSHClientSFTP SSH客户端SFTP对象 -type SSHClientSFTP struct { - Client *gosftp.Client +// NewClientByLocalPrivate 创建SSH客户端-本地私钥(~/.ssh/id_rsa)直连 +// +// ssh.ConnSSH{ +// User: "user", +// Addr: "192.168.x.x", +// Port: body.Port, +// } +func (c *ConnSSH) NewClientByLocalPrivate() (*ConnSSH, error) { + c.Port = 22 + c.AuthMode = "1" + privateKey, err := c.CurrentUserRsaKey(false) + if err != nil { + return nil, err + } + c.PrivateKey = privateKey + return c.NewClient() } -// Close 关闭会话 -func (s *SSHClientSFTP) Close() { - if s.Client != nil { - s.Client.Close() - } -} - -// CopyDirRemoteToLocal 复制目录-远程到本地 -func (s *SSHClientSFTP) CopyDirRemoteToLocal(remoteDir, localDir string) error { - // 列出远程目录中的文件和子目录 - remoteFiles, err := s.Client.ReadDir(remoteDir) +// CurrentUserRsaKey 当前用户OMC使用的RSA私钥 +// 默认读取私钥 +// ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa +// ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub +func (c *ConnSSH) CurrentUserRsaKey(publicKey bool) (string, error) { + usr, err := user.Current() if err != nil { - logger.Errorf("CopyDirRemoteToLocal failed to reading remote directory %s: => %s", remoteDir, err.Error()) - return err + logger.Errorf("CurrentUserRsaKey get => %s", err.Error()) + return "", err } - // 创建本地目录 - err = os.MkdirAll(localDir, 0775) - if err != nil { - logger.Errorf("CopyDirRemoteToLocal failed to creating local directory %s: => %s", localDir, err.Error()) - return err - } - - // 遍历远程文件和子目录并复制到本地 - for _, remoteFile := range remoteFiles { - remotePath := filepath.Join(remoteDir, remoteFile.Name()) - localPath := filepath.Join(localDir, remoteFile.Name()) - - if remoteFile.IsDir() { - // 如果是子目录,则递归复制子目录 - err = s.CopyDirRemoteToLocal(remotePath, localPath) - if err != nil { - logger.Errorf("CopyDirRemoteToLocal failed to copying remote directory %s: => %s", remotePath, err.Error()) - continue - } - } else { - // 如果是文件,则复制文件内容 - remoteFile, err := s.Client.Open(remotePath) - if err != nil { - logger.Errorf("CopyDirRemoteToLocal failed to opening remote file %s: => %s", remotePath, err.Error()) - continue - } - defer remoteFile.Close() - - localFile, err := os.Create(localPath) - if err != nil { - logger.Errorf("CopyDirRemoteToLocal failed to creating local file %s: => %s", localPath, err.Error()) - continue - } - defer localFile.Close() - - _, err = io.Copy(localFile, remoteFile) - if err != nil { - logger.Errorf("CopyDirRemoteToLocal failed to copying file contents from %s to %s: => %s", remotePath, localPath, err.Error()) - continue - } + // 是否存在私钥并创建 + keyPath := fmt.Sprintf("%s/.ssh/id_rsa", usr.HomeDir) + if _, err := os.Stat(keyPath); err != nil { + if _, err := cmd.ExecWithCheck("ssh-keygen", "-t", "rsa", "-P", "", "-f", keyPath); err != nil { + logger.Errorf("CurrentUserPrivateKey ssh-keygen [%s] rsa => %s", usr.Username, err.Error()) } } - return nil + + // 读取用户默认的文件 + if publicKey { + keyPath = keyPath + ".pub" + } + key, err := os.ReadFile(keyPath) + if err != nil { + logger.Errorf("CurrentUserRsaKey [%s] read => %s", usr.Username, err.Error()) + return "", fmt.Errorf("read file %s fail", keyPath) + } + return string(key), nil } -// CopyDirRemoteToLocal 复制目录-本地到远程 -func (s *SSHClientSFTP) CopyDirLocalToRemote(localDir, remoteDir string) error { - // 创建远程目录 - err := s.Client.MkdirAll(remoteDir) +// SendToAuthorizedKeys 发送当前用户私钥到远程服务器进行授权密钥 +func (c *ConnSSH) SendToAuthorizedKeys() error { + publicKey, err := c.CurrentUserRsaKey(true) if err != nil { - logger.Errorf("CopyDirLocalToRemote failed to creating remote directory %s: => %s", remoteDir, err.Error()) return err } - - // 遍历本地目录中的文件和子目录并复制到远程 - err = filepath.Walk(localDir, func(localPath string, info os.FileInfo, err error) error { - if err != nil { - return err - } - - // 生成远程路径 - remotePath := filepath.Join(remoteDir, localPath[len(localDir):]) - - if info.IsDir() { - // 如果是子目录,则创建远程目录 - err := s.Client.MkdirAll(remotePath) - if err != nil { - logger.Errorf("CopyDirLocalToRemote failed to creating remote directory %s: => %s", remotePath, err.Error()) - return nil - } - } else { - // 如果是文件,则复制文件内容 - localFile, err := os.Open(localPath) - if err != nil { - logger.Errorf("CopyDirLocalToRemote failed to opening local file %s: => %s", localPath, err.Error()) - return nil - } - defer localFile.Close() - - remoteFile, err := s.Client.Create(remotePath) - if err != nil { - logger.Errorf("CopyDirLocalToRemote failed to creating remote file %s: => %s", remotePath, err.Error()) - return nil - } - defer remoteFile.Close() - - _, err = io.Copy(remoteFile, localFile) - if err != nil { - logger.Errorf("CopyDirLocalToRemote failed to copying file contents from %s to %s: => %s", localPath, remotePath, err.Error()) - return nil - } - } - - return nil - }) + authorizedKeysEntry := fmt.Sprintln(strings.TrimSpace(publicKey)) + cmdStrArr := []string{ + fmt.Sprintf("sudo mkdir -p /home/%s/.ssh && sudo chown %s:%s /home/%s/.ssh && sudo chmod 700 /home/%s/.ssh", c.User, c.User, c.User, c.User, c.User), + fmt.Sprintf("sudo touch /home/%s/.ssh/authorized_keys && sudo chown %s:%s /home/%s/.ssh/authorized_keys && sudo chmod 600 /home/%s/.ssh/authorized_keys", c.User, c.User, c.User, c.User, c.User), + fmt.Sprintf("echo '%s' | sudo tee -a /home/%s/.ssh/authorized_keys", authorizedKeysEntry, c.User), + } + _, err = c.RunCMD(strings.Join(cmdStrArr, " && ")) if err != nil { - logger.Errorf("CopyDirLocalToRemote failed to walking local directory: => %s", err.Error()) - return err - } - return nil -} - -// CopyDirRemoteToLocal 复制文件-远程到本地 -func (s *SSHClientSFTP) CopyFileRemoteToLocal(remotePath, localPath string) error { - // 打开远程文件 - remoteFile, err := s.Client.Open(remotePath) - if err != nil { - logger.Errorf("CopyFileRemoteToLocal failed to opening remote file: => %s", err.Error()) - return err - } - defer remoteFile.Close() - - if err := os.MkdirAll(filepath.Dir(localPath), 0775); err != nil { - return err - } - - // 如果目标文件已经存在,先将目标文件重命名 - // if info, err := os.Stat(localPath); err == nil && !info.IsDir() { - // ext := filepath.Ext(localPath) - // name := localPath[0 : len(localPath)-len(ext)] - // newName := fmt.Sprintf("%s-%s%s", name, time.Now().Format("20060102_150405"), ext) - // err := os.Rename(localPath, newName) - // if err != nil { - // return err - // } - // } - - // 创建本地文件 - localFile, err := os.Create(localPath) - if err != nil { - logger.Errorf("CopyFileRemoteToLocal failed to creating local file: => %s", err.Error()) - return err - } - defer localFile.Close() - - // 复制文件内容 - _, err = io.Copy(localFile, remoteFile) - if err != nil { - logger.Errorf("CopyFileRemoteToLocal failed to copying contents: => %s", err.Error()) - return err - } - return nil -} - -// CopyDirRemoteToLocal 复制文件-本地到远程 -func (s *SSHClientSFTP) CopyFileLocalToRemote(localPath, remotePath string) error { - // 打开本地文件 - localFile, err := os.Open(localPath) - if err != nil { - logger.Errorf("CopyFileLocalToRemote failed to opening local file: => %s", err.Error()) - return err - } - defer localFile.Close() - - // 创建远程文件 - remoteFile, err := s.Client.Create(remotePath) - if err != nil { - logger.Errorf("CopyFileLocalToRemote failed to creating remote file: => %s", err.Error()) - return err - } - defer remoteFile.Close() - - // 复制文件内容 - _, err = io.Copy(remoteFile, localFile) - if err != nil { - logger.Errorf("CopyFileLocalToRemote failed to copying contents: => %s", err.Error()) + logger.Errorf("SendAuthorizedKeys echo err %s", err.Error()) return err } return nil diff --git a/src/framework/utils/ssh/ssh_session.go b/src/framework/utils/ssh/ssh_session.go new file mode 100644 index 00000000..1244ac2b --- /dev/null +++ b/src/framework/utils/ssh/ssh_session.go @@ -0,0 +1,73 @@ +package ssh + +import ( + "bytes" + "fmt" + "io" + "sync" + + gossh "golang.org/x/crypto/ssh" +) + +// SSHClientSession SSH客户端会话对象 +type SSHClientSession struct { + Stdin io.WriteCloser + Stdout *singleWriter + Session *gossh.Session +} + +// Close 关闭会话 +func (s *SSHClientSession) Close() { + if s.Stdin != nil { + s.Stdin.Close() + } + if s.Stdout != nil { + s.Stdout = nil + } + if s.Session != nil { + s.Session.Close() + } +} + +// Write 写入命令 回车(\n)才会执行 +func (s *SSHClientSession) Write(cmd string) (int, error) { + if s.Stdin == nil { + return 0, fmt.Errorf("ssh client session is nil to content write failed") + } + return s.Stdin.Write([]byte(cmd)) +} + +// Read 读取结果 +func (s *SSHClientSession) Read() []byte { + if s.Stdout == nil { + return []byte{} + } + bs := s.Stdout.Bytes() + if len(bs) > 0 { + s.Stdout.Reset() + return bs + } + return []byte{} +} + +// singleWriter SSH客户端会话消息 +type singleWriter struct { + b bytes.Buffer + mu sync.Mutex +} + +func (w *singleWriter) Write(p []byte) (int, error) { + w.mu.Lock() + defer w.mu.Unlock() + return w.b.Write(p) +} +func (w *singleWriter) Bytes() []byte { + w.mu.Lock() + defer w.mu.Unlock() + return w.b.Bytes() +} +func (w *singleWriter) Reset() { + w.mu.Lock() + defer w.mu.Unlock() + w.b.Reset() +} diff --git a/src/framework/utils/telnet/parse.go b/src/framework/utils/telnet/parse.go new file mode 100644 index 00000000..31e46bcf --- /dev/null +++ b/src/framework/utils/telnet/parse.go @@ -0,0 +1,77 @@ +package telnet + +import ( + "fmt" + "strings" +) + +// ConvertToStr 转换为string +func ConvertToStr(telnetClient *ConnTelnet, cmd string) (string, error) { + output, err := telnetClient.RunCMD(cmd) + if err != nil { + return "", err + } + str := strings.ToLower(output) + + // 截断 + index := strings.Index(str, "\n") + if index != -1 { + str = str[:index] + } + + // 命令成功 + if strings.Contains(str, "ok") || strings.Contains(str, "success") { + return str, nil + } + + return "", fmt.Errorf(str) +} + +// ConvertToMap 转换为map +func ConvertToMap(telnetClient *ConnTelnet, cmd string) (map[string]string, error) { + output, err := telnetClient.RunCMD(cmd) + if err != nil { + return nil, err + } + + // 无数据 + if strings.HasPrefix(output, "No ") { + // 截断 + index := strings.Index(output, "\n") + if index != -1 { + output = output[:index] + } + return nil, fmt.Errorf(output) + } + + // 初始化一个map用于存储拆分后的键值对 + m := make(map[string]string) + + var items []string + if strings.Contains(output, "\r\n") { + // 按照分隔符"\r\n"进行拆分 + items = strings.Split(output, "\r\n") + } else if strings.Contains(output, "\n") { + // 按照分隔符"\n"进行拆分 + items = strings.Split(output, "\n") + } + + // 遍历拆分后的结果 + for _, item := range items { + var pair []string + + if strings.Contains(item, "=") { + // 按照分隔符"="进行拆分键值对 + pair = strings.SplitN(item, "=", 2) + } else if strings.Contains(item, ":") { + // 按照分隔符":"进行拆分键值对 + pair = strings.SplitN(item, ":", 2) + } + + if len(pair) == 2 { + // 将键值对存入map中 + m[pair[0]] = pair[1] + } + } + return m, err +} diff --git a/src/framework/utils/telnet/telnet.go b/src/framework/utils/telnet/telnet.go index 078fd477..bcafd082 100644 --- a/src/framework/utils/telnet/telnet.go +++ b/src/framework/utils/telnet/telnet.go @@ -50,11 +50,11 @@ func (c *ConnTelnet) NewClient() (*ConnTelnet, error) { // fmt.Fprintln(client, c.User) // fmt.Fprintln(client, c.Password) - // 需要确保接收方理解并正确处理发送窗口大小设置命令 - client.Write([]byte{255, 251, 31}) // 发送窗口大小选项 - client.Write([]byte{255, 250, 31, 0, 128, 0, 120, 255, 240}) // 发送窗口行和列的大小 c.Client = &client + // 调整窗口大小 (120 列 x 128 行) + requestPty(c.Client, 120, 128) + // 排空连接登录的信息 c.RunCMD("") return c, nil @@ -73,8 +73,6 @@ func (c *ConnTelnet) RunCMD(cmd string) (string, error) { return "", fmt.Errorf("telnet client not connected") } conn := *c.Client - var buf bytes.Buffer - tmp := make([]byte, 1024) // 写入命令 if cmd != "" { @@ -83,22 +81,24 @@ func (c *ConnTelnet) RunCMD(cmd string) (string, error) { } } - // 读取命令消息 + var buf bytes.Buffer + tmp := make([]byte, 1024) for { - // 设置读取超时时间为1000毫秒 - conn.SetReadDeadline(time.Now().Add(1000 * time.Millisecond)) + // 读取命令消息 n, err := conn.Read(tmp) - if err != nil { - // 判断是否是超时错误 - if netErr, ok := err.(net.Error); ok && netErr.Timeout() { - break - } + if n == 0 || err != nil { + tmp = nil break } - if n == 0 { + + tmpStr := string(tmp[:n]) + buf.WriteString(tmpStr) + + // 是否有终止符 + if strings.HasSuffix(tmpStr, ">") || strings.HasSuffix(tmpStr, "> ") || strings.HasSuffix(tmpStr, "# ") { + tmp = nil break } - buf.Write(tmp[:n]) } defer buf.Reset() @@ -107,77 +107,24 @@ func (c *ConnTelnet) RunCMD(cmd string) (string, error) { } // NewClient 创建Telnet客户端会话对象 -func (c *ConnTelnet) NewClientSession(cols, rows uint8) (*TelnetClientSession, error) { +func (c *ConnTelnet) NewClientSession(cols, rows int) (*TelnetClientSession, error) { if c.Client == nil { return nil, fmt.Errorf("telnet client not connected") } + requestPty(c.Client, cols, rows) return &TelnetClientSession{ Client: *c.Client, }, nil } -// TelnetClientSession Telnet客户端会话对象 -type TelnetClientSession struct { - Client net.Conn -} - -// Close 关闭会话 -func (s *TelnetClientSession) Close() { - if s.Client != nil { - s.Client.Close() - } -} - -// Write 写入命令 不带回车(\n)也会执行根据客户端情况 -func (s *TelnetClientSession) Write(cmd string) (int, error) { - if s.Client == nil { - return 0, fmt.Errorf("client is nil to content write failed") - } - return s.Client.Write([]byte(cmd)) -} - -// Read 读取结果 等待一会才有结果 -func (s *TelnetClientSession) Read() []byte { - if s.Client == nil { - return []byte{} - } - - buf := make([]byte, 1024) - // 设置读取超时时间为100毫秒 - s.Client.SetReadDeadline(time.Now().Add(100 * time.Millisecond)) - _, err := s.Client.Read(buf) - if err != nil { - return []byte{} - } - return buf -} - -// CombinedOutput 发送命令带结果返回 -func (s *TelnetClientSession) CombinedOutput(cmd string) (string, error) { - n, err := s.Write(cmd) - if n == 0 || err != nil { - return "", err - } - - var buf bytes.Buffer - tmp := make([]byte, 1024) - for { - // 设置读取超时时间为1000毫秒 - s.Client.SetReadDeadline(time.Now().Add(1000 * time.Millisecond)) - n, err := s.Client.Read(tmp) - if err != nil { - // 判断是否是超时错误 - if netErr, ok := err.(net.Error); ok && netErr.Timeout() { - break - } - break - } - if n == 0 { - break - } - buf.Write(tmp[:n]) - } - defer buf.Reset() - - return buf.String(), nil +// requestPty 调整终端窗口大小 +func requestPty(client *net.Conn, cols, rows int) error { + if client == nil { + return fmt.Errorf("telnet client not connected") + } + conn := *client + // 需要确保接收方理解并正确处理发送窗口大小设置命令 + conn.Write([]byte{255, 251, 31}) + conn.Write([]byte{255, 250, 31, byte(cols >> 8), byte(cols & 0xFF), byte(rows >> 8), byte(rows & 0xFF), 255, 240}) + return nil } diff --git a/src/framework/utils/telnet/telnet_session.go b/src/framework/utils/telnet/telnet_session.go new file mode 100644 index 00000000..9289eebf --- /dev/null +++ b/src/framework/utils/telnet/telnet_session.go @@ -0,0 +1,74 @@ +package telnet + +import ( + "bytes" + "fmt" + "net" + "time" +) + +// TelnetClientSession Telnet客户端会话对象 +type TelnetClientSession struct { + Client net.Conn +} + +// Close 关闭会话 +func (s *TelnetClientSession) Close() { + if s.Client != nil { + s.Client.Close() + } +} + +// Write 写入命令 不带回车(\n)也会执行根据客户端情况 +func (s *TelnetClientSession) Write(cmd string) (int, error) { + if s.Client == nil { + return 0, fmt.Errorf("client is nil to content write failed") + } + return s.Client.Write([]byte(cmd)) +} + +// Read 读取结果 等待一会才有结果 +func (s *TelnetClientSession) Read() []byte { + if s.Client == nil { + return []byte{} + } + + buf := make([]byte, 1024) + // 设置读取超时时间为100毫秒 + s.Client.SetReadDeadline(time.Now().Add(100 * time.Millisecond)) + _, err := s.Client.Read(buf) + if err != nil { + return []byte{} + } + return buf +} + +// CombinedOutput 发送命令带结果返回 +func (s *TelnetClientSession) CombinedOutput(cmd string) (string, error) { + n, err := s.Write(cmd) + if n == 0 || err != nil { + return "", err + } + + var buf bytes.Buffer + tmp := make([]byte, 1024) + for { + // 设置读取超时时间为1000毫秒 + s.Client.SetReadDeadline(time.Now().Add(1000 * time.Millisecond)) + n, err := s.Client.Read(tmp) + if err != nil { + // 判断是否是超时错误 + if netErr, ok := err.(net.Error); ok && netErr.Timeout() { + break + } + break + } + if n == 0 { + break + } + buf.Write(tmp[:n]) + } + defer buf.Reset() + + return buf.String(), nil +} diff --git a/src/modules/network_data/controller/alarm.go b/src/modules/network_data/controller/all_alarm.go similarity index 100% rename from src/modules/network_data/controller/alarm.go rename to src/modules/network_data/controller/all_alarm.go diff --git a/src/modules/network_data/controller/perf_kpi.go b/src/modules/network_data/controller/all_kpi.go similarity index 97% rename from src/modules/network_data/controller/perf_kpi.go rename to src/modules/network_data/controller/all_kpi.go index 378bfa1f..be720acf 100644 --- a/src/modules/network_data/controller/perf_kpi.go +++ b/src/modules/network_data/controller/all_kpi.go @@ -1,13 +1,9 @@ package controller import ( - "fmt" - - "be.ems/lib/core/datasource" - "be.ems/lib/core/utils/date" - "be.ems/lib/log" "be.ems/src/framework/i18n" "be.ems/src/framework/utils/ctx" + "be.ems/src/framework/utils/date" "be.ems/src/framework/vo/result" "be.ems/src/modules/network_data/model" neDataService "be.ems/src/modules/network_data/service" diff --git a/src/modules/network_data/controller/amf.go b/src/modules/network_data/controller/amf.go index 0bfabf6b..fbc7142f 100644 --- a/src/modules/network_data/controller/amf.go +++ b/src/modules/network_data/controller/amf.go @@ -1,22 +1,30 @@ 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" neDataService "be.ems/src/modules/network_data/service" neService "be.ems/src/modules/network_element/service" + sysService "be.ems/src/modules/system/service" "github.com/gin-gonic/gin" + "github.com/gin-gonic/gin/binding" ) // 实例化控制层 AMFController 结构体 var NewAMFController = &AMFController{ neInfoService: neService.NewNeInfoImpl, - ueEventService: neDataService.NewUEEventImpl, + ueEventService: neDataService.NewUEEventAMFImpl, } // 网元AMF @@ -25,8 +33,8 @@ var NewAMFController = &AMFController{ type AMFController struct { // 网元信息服务 neInfoService neService.INeInfo - // CDR会话事件服务 - ueEventService neDataService.IUEEvent + // UE会话事件服务 + ueEventService neDataService.IUEEventAMF } // UE会话列表 @@ -34,20 +42,19 @@ type AMFController struct { // GET /ue/list func (s *AMFController) UEList(c *gin.Context) { language := ctx.AcceptLanguage(c) - var querys model.UEEventQuery + var querys model.UEEventAMFQuery if err := c.ShouldBindQuery(&querys); err != nil { c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) return } // 查询网元获取IP - neInfo := s.neInfoService.SelectNeInfoByNeTypeAndNeID(querys.NeType, querys.NeID) - if neInfo.NeId != querys.NeID || neInfo.IP == "" { - c.JSON(200, result.ErrMsg(i18n.TKey(language, "app.common.noNEInfo"))) - return - } - // remove for multi amf, - //querys.RmUID = neInfo.RmUID + // neInfo := s.neInfoService.SelectNeInfoByNeTypeAndNeID(querys.NeType, querys.NeID) + // if neInfo.NeId != querys.NeID || neInfo.IP == "" { + // c.JSON(200, result.ErrMsg(i18n.TKey(language, "app.common.noNEInfo"))) + // return + // } + // querys.RmUID = neInfo.RmUID // 查询数据 data := s.ueEventService.SelectPage(querys) @@ -79,3 +86,125 @@ func (s *AMFController) UERemove(c *gin.Context) { msg := i18n.TTemplate(language, "app.common.deleteSuccess", map[string]any{"num": rows}) c.JSON(200, result.OkMsg(msg)) } + +// UE会话列表导出 +// +// POST /ue/export +func (s *AMFController) UEExport(c *gin.Context) { + language := ctx.AcceptLanguage(c) + // 查询结果,根据查询条件结果,单页最大值限制 + var querys model.UEEventAMFQuery + if err := c.ShouldBindBodyWith(&querys, binding.JSON); err != nil { + c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + return + } + // 限制导出数据集 + if querys.PageSize > 10000 { + querys.PageSize = 10000 + } + data := s.ueEventService.SelectPage(querys) + if parse.Number(data["total"]) == 0 { + // 导出数据记录为空 + c.JSON(200, result.ErrMsg(i18n.TKey(language, "app.common.exportEmpty"))) + return + } + rows := data["rows"].([]model.UEEventAMF) + + // 导出文件名称 + fileName := fmt.Sprintf("amf_ue_event_export_%d_%d.xlsx", len(rows), time.Now().UnixMilli()) + // 第一行表头标题 + headerCells := map[string]string{ + "A1": "ID", + "B1": "IMSI", + "C1": "Event Type", + "D1": "Result", + "E1": "Time", + } + // 读取字典数据 UE 事件类型 + dictUEEventType := sysService.NewSysDictDataImpl.SelectDictDataByType("ue_event_type") + // 读取字典数据 UE 事件认证代码类型 + dictUEAauthCode := sysService.NewSysDictDataImpl.SelectDictDataByType("ue_auth_code") + // 读取字典数据 UE 事件CM状态 + dictUEEventCmState := sysService.NewSysDictDataImpl.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 = v.(string) + 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, + }) + } + + // 导出数据表格 + saveFilePath, err := file.WriteSheet(headerCells, dataCells, fileName, "") + if err != nil { + c.JSON(200, result.ErrMsg(err.Error())) + return + } + + c.FileAttachment(saveFilePath, fileName) +} diff --git a/src/modules/network_data/controller/ims.go b/src/modules/network_data/controller/ims.go index 4ddf7ba4..feef3813 100644 --- a/src/modules/network_data/controller/ims.go +++ b/src/modules/network_data/controller/ims.go @@ -1,22 +1,31 @@ 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/date" + "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" neDataService "be.ems/src/modules/network_data/service" neService "be.ems/src/modules/network_element/service" + sysService "be.ems/src/modules/system/service" "github.com/gin-gonic/gin" + "github.com/gin-gonic/gin/binding" ) // 实例化控制层 IMSController 结构体 var NewIMSController = &IMSController{ neInfoService: neService.NewNeInfoImpl, - cdrEventService: neDataService.NewCDREventImpl, + cdrEventService: neDataService.NewCDREventIMSImpl, } // 网元IMS @@ -26,7 +35,7 @@ type IMSController struct { // 网元信息服务 neInfoService neService.INeInfo // CDR会话事件服务 - cdrEventService neDataService.ICDREvent + cdrEventService neDataService.ICDREventIMS } // CDR会话列表 @@ -34,19 +43,19 @@ type IMSController struct { // GET /cdr/list func (s *IMSController) CDRList(c *gin.Context) { language := ctx.AcceptLanguage(c) - var querys model.CDREventQuery + var querys model.CDREventIMSQuery if err := c.ShouldBindQuery(&querys); err != nil { c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) return } // 查询网元获取IP - neInfo := s.neInfoService.SelectNeInfoByNeTypeAndNeID(querys.NeType, querys.NeID) - if neInfo.NeId != querys.NeID || neInfo.IP == "" { - c.JSON(200, result.ErrMsg(i18n.TKey(language, "app.common.noNEInfo"))) - return - } - querys.RmUID = neInfo.RmUID + // neInfo := s.neInfoService.SelectNeInfoByNeTypeAndNeID(querys.NeType, querys.NeID) + // if neInfo.NeId != querys.NeID || neInfo.IP == "" { + // c.JSON(200, result.ErrMsg(i18n.TKey(language, "app.common.noNEInfo"))) + // return + // } + // querys.RmUID = neInfo.RmUID // 查询数据 data := s.cdrEventService.SelectPage(querys) @@ -78,3 +87,126 @@ func (s *IMSController) CDRRemove(c *gin.Context) { msg := i18n.TTemplate(language, "app.common.deleteSuccess", map[string]any{"num": rows}) c.JSON(200, result.OkMsg(msg)) } + +// CDR会话列表导出 +// +// POST /cdr/export +func (s *IMSController) CDRExport(c *gin.Context) { + language := ctx.AcceptLanguage(c) + // 查询结果,根据查询条件结果,单页最大值限制 + var querys model.CDREventIMSQuery + if err := c.ShouldBindBodyWith(&querys, binding.JSON); err != nil { + c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + return + } + // 限制导出数据集 + if querys.PageSize > 10000 { + querys.PageSize = 10000 + } + data := s.cdrEventService.SelectPage(querys) + if parse.Number(data["total"]) == 0 { + // 导出数据记录为空 + c.JSON(200, result.ErrMsg(i18n.TKey(language, "app.common.exportEmpty"))) + return + } + rows := data["rows"].([]model.CDREventIMS) + + // 导出文件名称 + fileName := fmt.Sprintf("ims_cdr_event_export_%d_%d.xlsx", len(rows), time.Now().UnixMilli()) + // 第一行表头标题 + headerCells := map[string]string{ + "A1": "ID", + "B1": "Record Behavior", + "C1": "Type", + "D1": "Called", + "E1": "Caller", + "F1": "Duration", + "G1": "Result", + "H1": "Time", + } + // 读取字典数据 CDR SIP响应代码类别类型 + dictCDRSipCode := sysService.NewSysDictDataImpl.SelectDictDataByType("cdr_sip_code") + // 读取字典数据 CDR 呼叫类型 + dictCDRCallType := sysService.NewSysDictDataImpl.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) + } + // 被叫 + called := "" + if v, ok := cdrJSON["calledParty"]; ok && v != nil { + called = v.(string) + } + // 主叫 + caller := "" + if v, ok := cdrJSON["callerParty"]; ok && v != nil { + caller = 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 + } + } + } + // 时长 + 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 { + releaseTime := parse.Number(v) + timeStr = date.ParseDateToStr(releaseTime, date.YYYY_MM_DDTHH_MM_SSZ) + } + + dataCells = append(dataCells, map[string]any{ + "A" + idx: row.ID, + "B" + idx: recordType, + "C" + idx: callTypeLable, + "D" + idx: called, + "E" + idx: caller, + "F" + idx: duration, + "G" + idx: callResult, + "H" + idx: timeStr, + }) + } + + // 导出数据表格 + saveFilePath, err := file.WriteSheet(headerCells, dataCells, fileName, "") + if err != nil { + c.JSON(200, result.ErrMsg(err.Error())) + return + } + + c.FileAttachment(saveFilePath, fileName) +} diff --git a/src/modules/network_data/controller/mme.go b/src/modules/network_data/controller/mme.go new file mode 100644 index 00000000..a7707a18 --- /dev/null +++ b/src/modules/network_data/controller/mme.go @@ -0,0 +1,200 @@ +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/date" + "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" + neDataService "be.ems/src/modules/network_data/service" + neService "be.ems/src/modules/network_element/service" + sysService "be.ems/src/modules/system/service" + "github.com/gin-gonic/gin" + "github.com/gin-gonic/gin/binding" +) + +// 实例化控制层 MMEController 结构体 +var NewMMEController = &MMEController{ + neInfoService: neService.NewNeInfoImpl, + ueEventService: neDataService.NewUEEventMMEImpl, +} + +// 网元MME +// +// PATH /mme +type MMEController struct { + // 网元信息服务 + neInfoService neService.INeInfo + // UE会话事件服务 + ueEventService neDataService.IUEEventMME +} + +// UE会话列表 +// +// GET /ue/list +func (s *MMEController) UEList(c *gin.Context) { + language := ctx.AcceptLanguage(c) + var querys model.UEEventMMEQuery + if err := c.ShouldBindQuery(&querys); err != nil { + c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + return + } + + // 查询网元获取IP + // neInfo := s.neInfoService.SelectNeInfoByNeTypeAndNeID(querys.NeType, querys.NeID) + // if neInfo.NeId != querys.NeID || neInfo.IP == "" { + // c.JSON(200, result.ErrMsg(i18n.TKey(language, "app.common.noNEInfo"))) + // return + // } + // querys.RmUID = neInfo.RmUID + + // 查询数据 + data := s.ueEventService.SelectPage(querys) + c.JSON(200, result.Ok(data)) +} + +// UE会话删除 +// +// DELETE /ue/:ueIds +func (s *MMEController) UERemove(c *gin.Context) { + language := ctx.AcceptLanguage(c) + ueIds := c.Param("ueIds") + if ueIds == "" { + c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + return + } + // 处理字符转id数组后去重 + ids := strings.Split(ueIds, ",") + uniqueIDs := parse.RemoveDuplicates(ids) + if len(uniqueIDs) <= 0 { + c.JSON(200, result.Err(nil)) + return + } + rows, err := s.ueEventService.DeleteByIds(uniqueIDs) + if err != nil { + c.JSON(200, result.ErrMsg(i18n.TKey(language, err.Error()))) + return + } + msg := i18n.TTemplate(language, "app.common.deleteSuccess", map[string]any{"num": rows}) + c.JSON(200, result.OkMsg(msg)) +} + +// UE会话列表导出 +// +// POST /ue/export +func (s *MMEController) UEExport(c *gin.Context) { + language := ctx.AcceptLanguage(c) + // 查询结果,根据查询条件结果,单页最大值限制 + var querys model.UEEventMMEQuery + if err := c.ShouldBindBodyWith(&querys, binding.JSON); err != nil { + c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + return + } + // 限制导出数据集 + if querys.PageSize > 10000 { + querys.PageSize = 10000 + } + data := s.ueEventService.SelectPage(querys) + if parse.Number(data["total"]) == 0 { + // 导出数据记录为空 + c.JSON(200, result.ErrMsg(i18n.TKey(language, "app.common.exportEmpty"))) + return + } + rows := data["rows"].([]model.UEEventMME) + + // 导出文件名称 + fileName := fmt.Sprintf("mme_ue_event_export_%d_%d.xlsx", len(rows), time.Now().UnixMilli()) + // 第一行表头标题 + headerCells := map[string]string{ + "A1": "ID", + "B1": "IMSI", + "C1": "Event Type", + "D1": "Result", + "E1": "Time", + } + // 读取字典数据 UE 事件类型 + dictUEEventType := sysService.NewSysDictDataImpl.SelectDictDataByType("ue_event_type") + // 读取字典数据 UE 事件认证代码类型 + dictUEAauthCode := sysService.NewSysDictDataImpl.SelectDictDataByType("ue_auth_code") + // 读取字典数据 UE 事件CM状态 + dictUEEventCmState := sysService.NewSysDictDataImpl.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, + }) + } + + // 导出数据表格 + saveFilePath, err := file.WriteSheet(headerCells, dataCells, fileName, "") + if err != nil { + c.JSON(200, result.ErrMsg(err.Error())) + return + } + + c.FileAttachment(saveFilePath, fileName) +} diff --git a/src/modules/network_data/controller/smf.go b/src/modules/network_data/controller/smf.go index ee3ddb95..2e033386 100644 --- a/src/modules/network_data/controller/smf.go +++ b/src/modules/network_data/controller/smf.go @@ -1,32 +1,39 @@ 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" neDataService "be.ems/src/modules/network_data/service" neService "be.ems/src/modules/network_element/service" "github.com/gin-gonic/gin" + "github.com/gin-gonic/gin/binding" ) -// 实例化控制层 IMSController 结构体 +// 实例化控制层 SMFController 结构体 var NewSMFController = &SMFController{ neInfoService: neService.NewNeInfoImpl, - cdrEventService: neDataService.NewSMFCDREventImpl, + cdrEventService: neDataService.NewCDREventSMFImpl, } -// 网元IMS +// 网元SMF // -// PATH /ims +// PATH /smf type SMFController struct { // 网元信息服务 neInfoService neService.INeInfo - // SMF CDR会话事件服务 - cdrEventService neDataService.SMFCDREvent + // CDR会话事件服务 + cdrEventService neDataService.ICDREventSMF } // CDR会话列表 @@ -34,19 +41,19 @@ type SMFController struct { // GET /cdr/list func (s *SMFController) CDRList(c *gin.Context) { language := ctx.AcceptLanguage(c) - var querys model.SMFCDREventQuery + var querys model.CDREventSMFQuery if err := c.ShouldBindQuery(&querys); err != nil { c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) return } // 查询网元获取IP - neInfo := s.neInfoService.SelectNeInfoByNeTypeAndNeID(querys.NeType, querys.NeID) - if neInfo.NeId != querys.NeID || neInfo.IP == "" { - c.JSON(200, result.ErrMsg(i18n.TKey(language, "app.common.noNEInfo"))) - return - } - querys.RmUID = neInfo.RmUID + // neInfo := s.neInfoService.SelectNeInfoByNeTypeAndNeID(querys.NeType, querys.NeID) + // if neInfo.NeId != querys.NeID || neInfo.IP == "" { + // c.JSON(200, result.ErrMsg(i18n.TKey(language, "app.common.noNEInfo"))) + // return + // } + // querys.RmUID = neInfo.RmUID // 查询数据 data := s.cdrEventService.SelectPage(querys) @@ -78,3 +85,174 @@ func (s *SMFController) CDRRemove(c *gin.Context) { msg := i18n.TTemplate(language, "app.common.deleteSuccess", map[string]any{"num": rows}) c.JSON(200, result.OkMsg(msg)) } + +// CDR会话列表导出 +// +// POST /cdr/export +func (s *SMFController) CDRExport(c *gin.Context) { + language := ctx.AcceptLanguage(c) + // 查询结果,根据查询条件结果,单页最大值限制 + var querys model.CDREventSMFQuery + if err := c.ShouldBindBodyWith(&querys, binding.JSON); err != nil { + c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + return + } + // 限制导出数据集 + if querys.PageSize > 10000 { + querys.PageSize = 10000 + } + data := s.cdrEventService.SelectPage(querys) + if parse.Number(data["total"]) == 0 { + // 导出数据记录为空 + c.JSON(200, result.ErrMsg(i18n.TKey(language, "app.common.exportEmpty"))) + return + } + rows := data["rows"].([]model.CDREventSMF) + + // 导出文件名称 + fileName := fmt.Sprintf("smf_cdr_event_export_%d_%d.xlsx", len(rows), time.Now().UnixMilli()) + // 第一行表头标题 + headerCells := map[string]string{ + "A1": "ID", + "B1": "Charging ID", + "C1": "Subscriber ID Data", + "D1": "Subscriber ID Type", + "E1": "Data Volume Uplink", + "F1": "Data Volume Downlink", + "G1": "Data Total Volume", + "H1": "Duration", + "I1": "Invocation Time", + "J1": "PDU Session Charging Information", + } + // 从第二行开始的数据 + 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) + } + } + // 数据量上行链路 + dataVolumeUplink := []string{} + // 数据量下行链路 + dataVolumeDownlink := []string{} + // 数据总量 + dataTotalVolume := []string{} + 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 = append(dataVolumeUplink, fmt.Sprint(parse.Number(dup))) + } + if ddown, ddownOk := udata["dataVolumeDownlink"]; ddownOk { + dataVolumeDownlink = append(dataVolumeDownlink, fmt.Sprint(parse.Number(ddown))) + } + if dt, dtOk := udata["dataTotalVolume"]; dtOk { + dataTotalVolume = append(dataTotalVolume, fmt.Sprint(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) + } + // 记录打开时间 + pduSessionChargingInformation := "" + if v, ok := cdrJSON["pDUSessionChargingInformation"]; ok && v != nil { + pduInfo := v.(map[string]any) + + User_Identifier := "" + if v, ok := pduInfo["userIdentifier"]; ok && v != nil { + User_Identifier = v.(string) + } + SSC_Mode := "" + if v, ok := pduInfo["sSCMode"]; ok && v != nil { + SSC_Mode = v.(string) + } + RAT_Type := "" + if v, ok := pduInfo["rATType"]; ok && v != nil { + RAT_Type = v.(string) + } + DNN_ID := "" + if v, ok := pduInfo["dNNID"]; ok && v != nil { + DNN_ID = v.(string) + } + PDU_Type := "" + if v, ok := pduInfo["pDUType"]; ok && v != nil { + PDU_Type = v.(string) + } + PDU_IPv4 := "" + PDU_IPv6 := "" + 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) + } + } + + pduSessionChargingInformation = fmt.Sprintf(`User Identifier: %s +SSC Mode: %s RAT Type: %s DNN ID: %s +PDU Type: %s +PDU IPv4 Address: %s +PDU IPv6 Addres Swith Prefix: %s`, User_Identifier, SSC_Mode, RAT_Type, DNN_ID, PDU_Type, PDU_IPv4, PDU_IPv6) + } + + dataCells = append(dataCells, map[string]any{ + "A" + idx: row.ID, + "B" + idx: chargingID, + "C" + idx: subscriptionIDData, + "D" + idx: subscriptionIDType, + "E" + idx: strings.Join(dataVolumeUplink, ","), + "F" + idx: strings.Join(dataVolumeDownlink, ","), + "G" + idx: strings.Join(dataTotalVolume, ","), + "H" + idx: duration, + "I" + idx: invocationTimestamp, + "J" + idx: pduSessionChargingInformation, + }) + } + + // 导出数据表格 + saveFilePath, err := file.WriteSheet(headerCells, dataCells, fileName, "") + if err != nil { + c.JSON(200, result.ErrMsg(err.Error())) + return + } + + c.FileAttachment(saveFilePath, fileName) +} diff --git a/src/modules/network_element/controller/udm_auth.go b/src/modules/network_data/controller/udm_auth.go similarity index 60% rename from src/modules/network_element/controller/udm_auth.go rename to src/modules/network_data/controller/udm_auth.go index f7910fe8..e19888a9 100644 --- a/src/modules/network_element/controller/udm_auth.go +++ b/src/modules/network_data/controller/udm_auth.go @@ -2,18 +2,19 @@ package controller import ( "fmt" + "path/filepath" "strings" "time" - mmlclient "be.ems/lib/core/mml_client" "be.ems/src/framework/constants/uploadsubpath" "be.ems/src/framework/i18n" "be.ems/src/framework/utils/ctx" "be.ems/src/framework/utils/file" "be.ems/src/framework/utils/parse" - "be.ems/src/framework/utils/ssh" + "be.ems/src/framework/utils/telnet" "be.ems/src/framework/vo/result" - "be.ems/src/modules/network_element/model" + "be.ems/src/modules/network_data/model" + neDataService "be.ems/src/modules/network_data/service" neService "be.ems/src/modules/network_element/service" "github.com/gin-gonic/gin" "github.com/gin-gonic/gin/binding" @@ -21,21 +22,21 @@ import ( // 实例化控制层 UDMAuthController 结构体 var NewUDMAuth = &UDMAuthController{ - udmAuthService: neService.NewUDMAuthImpl, + udmAuthService: neDataService.NewUDMAuthImpl, neInfoService: neService.NewNeInfoImpl, } -// UDM鉴权用户请求 +// UDM鉴权用户 // // PATH /udm/auth type UDMAuthController struct { // UDM鉴权信息服务 - udmAuthService neService.IUDMAuth + udmAuthService neDataService.IUDMAuth // 网元信息服务 neInfoService neService.INeInfo } -// UDM鉴权用户-获取全部保存数据库 +// UDM鉴权用户重载数据 // // POST /resetData/:neId func (s *UDMAuthController) ResetData(c *gin.Context) { @@ -47,21 +48,21 @@ func (s *UDMAuthController) ResetData(c *gin.Context) { } neId = "" - data := s.udmAuthService.Save(neId) + data := s.udmAuthService.ResetData(neId) c.JSON(200, result.OkData(data)) } -// UDM鉴权用户 +// UDM鉴权用户列表 // // GET /list func (s *UDMAuthController) List(c *gin.Context) { querys := ctx.QueryMap(c) querys["neId"] = "" - data := s.udmAuthService.Page(querys) + data := s.udmAuthService.SelectPage(querys) c.JSON(200, result.Ok(data)) } -// UDM鉴权用户-信息 +// UDM鉴权用户信息 // // GET /:neId/:imsi func (s *UDMAuthController) Info(c *gin.Context) { @@ -80,10 +81,16 @@ func (s *UDMAuthController) Info(c *gin.Context) { return } - msg := fmt.Sprintf("dsp authdat:imsi=%s", imsi) + telnetClient, err := s.neInfoService.NeRunTelnetClient("UDM", neId, 1) + if err != nil { + c.JSON(200, result.ErrMsg(err.Error())) + return + } + defer telnetClient.Close() // 发送MML - data, err := mmlclient.MMLSendMsgToMap(neInfo.IP, msg) + cmd := fmt.Sprintf("dsp authdat:imsi=%s", imsi) + data, err := telnet.ConvertToMap(telnetClient, cmd) if err != nil { c.JSON(200, result.ErrMsg(err.Error())) return @@ -94,31 +101,31 @@ func (s *UDMAuthController) Info(c *gin.Context) { return } - // 查询数据库是否存在并存入 neId = "" - var userInfo model.UDMAuth - list := s.udmAuthService.List(model.UDMAuth{NeID: neId, Imsi: imsi}) - if len(list) > 0 { - userInfo = list[0] - // 返回查询的用户信息 - userInfo.Amf = data["amf"] - userInfo.AlgoIndex = data["algo"] - userInfo.Opc = data["opc"] - userInfo.Ki = data["ki"] - } else { - userInfo := model.UDMAuth{ - Imsi: imsi, - Amf: data["amf"], - AlgoIndex: data["algo"], - Opc: data["opc"], - Ki: data["ki"], - } - s.udmAuthService.Insert(neId, userInfo) + u := model.UDMAuth{ + IMSI: imsi, + Amf: data["amf"], + Status: "1", + Ki: data["ki"], + AlgoIndex: data["algo"], + Opc: data["opc"], + NeId: neId, } - c.JSON(200, result.OkData(userInfo)) + + // 查询imsi存在赋予id用于更新 + list := s.udmAuthService.SelectList(u) + if len(list) > 0 { + item := list[0] + if item.ID != "" { + u.ID = item.ID + } + } + go s.udmAuthService.Insert(neId, u) + + c.JSON(200, result.OkData(u)) } -// UDM鉴权用户-增加 +// UDM鉴权用户新增 // // POST /:neId func (s *UDMAuthController) Add(c *gin.Context) { @@ -131,7 +138,7 @@ func (s *UDMAuthController) Add(c *gin.Context) { var body model.UDMAuth err := c.ShouldBindBodyWith(&body, binding.JSON) - if err != nil || body.Imsi == "" { + if err != nil || body.IMSI == "" { c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) return } @@ -143,10 +150,16 @@ func (s *UDMAuthController) Add(c *gin.Context) { return } - msg := fmt.Sprintf("add authdat:imsi=%s,ki=%s,amf=%s,algo=%s,opc=%s", body.Imsi, body.Ki, body.Amf, body.AlgoIndex, body.Opc) + telnetClient, err := s.neInfoService.NeRunTelnetClient("UDM", neId, 1) + if err != nil { + c.JSON(200, result.ErrMsg(err.Error())) + return + } + defer telnetClient.Close() // 发送MML - data, err := mmlclient.MMLSendMsgToString(neInfo.IP, msg) + cmd := fmt.Sprintf("add authdat:imsi=%s,ki=%s,amf=%s,algo=%s,opc=%s", body.IMSI, body.Ki, body.Amf, body.AlgoIndex, body.Opc) + data, err := telnet.ConvertToStr(telnetClient, cmd) if err != nil { c.JSON(200, result.ErrMsg(err.Error())) return @@ -155,12 +168,12 @@ func (s *UDMAuthController) Add(c *gin.Context) { // 命令ok时 if strings.Contains(data, "ok") { neId = "" - s.udmAuthService.Insert(neId, body) + go s.udmAuthService.Insert(neId, body) } c.JSON(200, result.OkData(data)) } -// UDM鉴权用户-批量添加 +// UDM鉴权用户批量新增 // // POST /:neId/:num func (s *UDMAuthController) Adds(c *gin.Context) { @@ -174,7 +187,7 @@ func (s *UDMAuthController) Adds(c *gin.Context) { var body model.UDMAuth err := c.ShouldBindBodyWith(&body, binding.JSON) - if err != nil || body.Imsi == "" { + if err != nil || body.IMSI == "" { c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) return } @@ -186,10 +199,16 @@ func (s *UDMAuthController) Adds(c *gin.Context) { return } - msg := fmt.Sprintf("baa authdat:start_imsi=%s,sub_num=%s,ki=%s,amf=%s,algo=%s,opc=%s", body.Imsi, num, body.Ki, body.Amf, body.AlgoIndex, body.Opc) + telnetClient, err := s.neInfoService.NeRunTelnetClient("UDM", neId, 1) + if err != nil { + c.JSON(200, result.ErrMsg(err.Error())) + return + } + defer telnetClient.Close() // 发送MML - data, err := mmlclient.MMLSendMsgToString(neInfo.IP, msg) + cmd := fmt.Sprintf("baa authdat:start_imsi=%s,sub_num=%s,ki=%s,amf=%s,algo=%s,opc=%s", body.IMSI, num, body.Ki, body.Amf, body.AlgoIndex, body.Opc) + data, err := telnet.ConvertToStr(telnetClient, cmd) if err != nil { c.JSON(200, result.ErrMsg(err.Error())) return @@ -198,12 +217,12 @@ func (s *UDMAuthController) Adds(c *gin.Context) { // 命令ok时 if strings.Contains(data, "ok") { neId = "" - s.udmAuthService.Inserts(neId, body, num) + go s.udmAuthService.LoadData(neId, body.IMSI, num) } c.JSON(200, result.OkData(data)) } -// UDM鉴权用户-修改 +// UDM鉴权用户修改 // // PUT /:neId func (s *UDMAuthController) Edit(c *gin.Context) { @@ -216,7 +235,7 @@ func (s *UDMAuthController) Edit(c *gin.Context) { var body model.UDMAuth err := c.ShouldBindBodyWith(&body, binding.JSON) - if err != nil || body.Imsi == "" { + if err != nil || body.IMSI == "" { c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) return } @@ -228,23 +247,29 @@ func (s *UDMAuthController) Edit(c *gin.Context) { return } - msg := fmt.Sprintf("mod authdata:imsi=%s", body.Imsi) - // 修改的参数名称 - if body.Ki != "" { - msg += fmt.Sprintf(",ki=%s", body.Ki) - } - if body.Amf != "" { - msg += fmt.Sprintf(",amf=%s", body.Amf) - } - if body.AlgoIndex != "" { - msg += fmt.Sprintf(",algo=%s", body.AlgoIndex) - } - if body.Opc != "" { - msg += fmt.Sprintf(",opc=%s", body.Opc) + telnetClient, err := s.neInfoService.NeRunTelnetClient("UDM", neId, 1) + if err != nil { + c.JSON(200, result.ErrMsg(err.Error())) + return } + defer telnetClient.Close() // 发送MML - data, err := mmlclient.MMLSendMsgToString(neInfo.IP, msg) + cmd := fmt.Sprintf("mod authdata:imsi=%s", body.IMSI) + // 修改的参数名称 + if body.Ki != "" { + cmd += fmt.Sprintf(",ki=%s", body.Ki) + } + if body.Amf != "" { + cmd += fmt.Sprintf(",amf=%s", body.Amf) + } + if body.AlgoIndex != "" { + cmd += fmt.Sprintf(",algo=%s", body.AlgoIndex) + } + if body.Opc != "" { + cmd += fmt.Sprintf(",opc=%s", body.Opc) + } + data, err := telnet.ConvertToStr(telnetClient, cmd) if err != nil { c.JSON(200, result.ErrMsg(err.Error())) return @@ -253,12 +278,12 @@ func (s *UDMAuthController) Edit(c *gin.Context) { // 命令ok时 if strings.Contains(data, "ok") { neId = "" - s.udmAuthService.Update(neId, body) + go s.udmAuthService.Insert(neId, body) } c.JSON(200, result.OkData(data)) } -// UDM鉴权用户-删除 +// UDM鉴权用户删除 // // DELETE /:neId/:imsi func (s *UDMAuthController) Remove(c *gin.Context) { @@ -285,27 +310,34 @@ func (s *UDMAuthController) Remove(c *gin.Context) { return } + telnetClient, err := s.neInfoService.NeRunTelnetClient("UDM", neId, 1) + if err != nil { + c.JSON(200, result.ErrMsg(err.Error())) + return + } + defer telnetClient.Close() + resultData := map[string]string{} for _, imsi := range uniqueIDs { - msg := fmt.Sprintf("del authdat:imsi=%s", imsi) - // 发送MML - data, err := mmlclient.MMLSendMsgToString(neInfo.IP, msg) + cmd := fmt.Sprintf("del authdat:imsi=%s", imsi) + data, err := telnet.ConvertToStr(telnetClient, cmd) if err != nil { resultData[imsi] = err.Error() + continue } // 命令ok时 if strings.Contains(data, "ok") { neId = "" - s.udmAuthService.Delete(neId, imsi) - resultData[imsi] = data + go s.udmAuthService.Delete(neId, imsi) } + resultData[imsi] = data } c.JSON(200, result.OkData(resultData)) } -// UDM鉴权用户-批量删除 +// UDM鉴权用户批量删除 // // DELETE /:neId/:imsi/:num func (s *UDMAuthController) Removes(c *gin.Context) { @@ -325,10 +357,16 @@ func (s *UDMAuthController) Removes(c *gin.Context) { return } - msg := fmt.Sprintf("bde authdat:start_imsi=%s,sub_num=%s", imsi, num) + telnetClient, err := s.neInfoService.NeRunTelnetClient("UDM", neId, 1) + if err != nil { + c.JSON(200, result.ErrMsg(err.Error())) + return + } + defer telnetClient.Close() // 发送MML - data, err := mmlclient.MMLSendMsgToString(neInfo.IP, msg) + cmd := fmt.Sprintf("bde authdat:start_imsi=%s,sub_num=%s", imsi, num) + data, err := telnet.ConvertToStr(telnetClient, cmd) if err != nil { c.JSON(200, result.ErrMsg(err.Error())) return @@ -337,12 +375,12 @@ func (s *UDMAuthController) Removes(c *gin.Context) { // 命令ok时 if strings.Contains(data, "ok") { neId = "" - s.udmAuthService.Deletes(neId, imsi, num) + go s.udmAuthService.LoadData(neId, imsi, num) } c.JSON(200, result.OkData(data)) } -// UDM鉴权用户-导出 +// UDM鉴权用户导出 // // POST /export func (s *UDMAuthController) Export(c *gin.Context) { @@ -358,14 +396,14 @@ func (s *UDMAuthController) Export(c *gin.Context) { } if !(body.Type == "csv" || body.Type == "txt") { - c.JSON(200, result.ErrMsg(i18n.TKey(language, "ne.udm.errImportUserAuthFileFormat"))) + c.JSON(200, result.ErrMsg(i18n.TKey(language, "ne.udm.errExportType"))) return } neId := "" - list := s.udmAuthService.List(model.UDMAuth{NeID: neId}) + list := s.udmAuthService.SelectList(model.UDMAuth{NeId: neId}) // 文件名 - fileName := fmt.Sprintf("OMC_AUTH_USER_EXPORT_%s_%d.%s", neId, time.Now().UnixMilli(), body.Type) + fileName := fmt.Sprintf("udm_auth_user_export_%s_%d.%s", neId, time.Now().UnixMilli(), body.Type) filePath := fmt.Sprintf("%s/%s", file.ParseUploadFileDir(uploadsubpath.EXPORT), fileName) if body.Type == "csv" { @@ -373,7 +411,7 @@ func (s *UDMAuthController) Export(c *gin.Context) { data := [][]string{} data = append(data, []string{"imsi", "ki", "algo", "amf", "opc"}) for _, v := range list { - data = append(data, []string{v.Imsi, v.Ki, v.AlgoIndex, v.Amf, v.Opc}) + data = append(data, []string{v.IMSI, v.Ki, v.AlgoIndex, v.Amf, v.Opc}) } // 输出到文件 err := file.WriterFileCSV(data, filePath) @@ -387,7 +425,7 @@ func (s *UDMAuthController) Export(c *gin.Context) { // 转换数据 data := [][]string{} for _, v := range list { - data = append(data, []string{v.Imsi, v.Ki, v.AlgoIndex, v.Amf, v.Opc}) + data = append(data, []string{v.IMSI, v.Ki, v.AlgoIndex, v.Amf, v.Opc}) } // 输出到文件 err = file.WriterFileTXT(data, ",", filePath) @@ -400,55 +438,68 @@ func (s *UDMAuthController) Export(c *gin.Context) { c.FileAttachment(filePath, fileName) } -// UDM鉴权用户-导入 +// UDM鉴权用户导入 // // POST /import func (s *UDMAuthController) Import(c *gin.Context) { language := ctx.AcceptLanguage(c) - neId := c.PostForm("neId") - if neId == "" { + var body struct { + NeId string `json:"neId" binding:"required"` + UploadPath string `json:"uploadPath" binding:"required"` + } + if err := c.ShouldBindBodyWith(&body, binding.JSON); err != nil { c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) return } - formFile, err := c.FormFile("file") - if err != nil { - c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) - return - } - // 获取文件名 - if !(strings.HasSuffix(formFile.Filename, ".csv") || strings.HasSuffix(formFile.Filename, ".txt")) { + + // 判断文件名 + if !(strings.HasSuffix(body.UploadPath, ".csv") || strings.HasSuffix(body.UploadPath, ".txt")) { c.JSON(200, result.ErrMsg(i18n.TKey(language, "ne.udm.errImportUserAuthFileFormat"))) return } - // 上传文件转存 - upFilePath, err := file.TransferUploadFile(formFile, uploadsubpath.IMPORT, nil) - if err != nil { - c.JSON(200, result.ErrMsg(err.Error())) - return - } // 查询网元获取IP - neInfo := s.neInfoService.SelectNeInfoByNeTypeAndNeID("UDM", neId) - if neInfo.NeId != neId || neInfo.IP == "" { + neInfo := s.neInfoService.SelectNeInfoByNeTypeAndNeID("UDM", body.NeId) + if neInfo.NeId != body.NeId || neInfo.IP == "" { c.JSON(200, result.ErrMsg(i18n.TKey(language, "app.common.noNEInfo"))) return } - // 本地文件 - localPath := file.ParseUploadFilePath(upFilePath) - nePath := "/tmp" //config.Get("mml.upload").(string) - // 复制到远程 - err = ssh.FileSCPLocalToNe(neInfo.IP, localPath, nePath) + // 网元主机的SSH客户端 + sshClient, err := s.neInfoService.NeRunSSHClient(neInfo.NeType, neInfo.NeId) if err != nil { c.JSON(200, result.ErrMsg(err.Error())) return } + defer sshClient.Close() + // 网元主机的SSH客户端进行文件传输 + sftpClient, err := sshClient.NewClientSFTP() + if err != nil { + c.JSON(200, result.ErrMsg(err.Error())) + return + } + defer sftpClient.Close() - fileName := localPath[strings.LastIndex(localPath, "/")+1:] - msg := fmt.Sprintf("import authdat:path=%s", fmt.Sprintf("%s/%s", nePath, fileName)) + // 本地文件 + localFilePath := file.ParseUploadFilePath(body.UploadPath) + neFilePath := fmt.Sprintf("/tmp/%s", filepath.Base(localFilePath)) + // 复制到远程 + if err = sftpClient.CopyFileLocalToRemote(localFilePath, neFilePath); err != nil { + c.JSON(200, result.ErrMsg("error uploading file")) + return + } + + // 网元主机的Telnet客户端 + telnetClient, err := s.neInfoService.NeRunTelnetClient(neInfo.NeType, neInfo.NeId, 1) + if err != nil { + c.JSON(200, result.ErrMsg(err.Error())) + return + } + defer telnetClient.Close() // 发送MML - data, err := mmlclient.MMLSendMsgToString(neInfo.IP, msg) + cmd := fmt.Sprintf("import authdat:path=%s", neFilePath) + data, err := telnet.ConvertToStr(telnetClient, cmd) if err != nil { c.JSON(200, result.ErrMsg(err.Error())) return @@ -456,15 +507,15 @@ func (s *UDMAuthController) Import(c *gin.Context) { // 命令ok时 if strings.Contains(data, "ok") { - if strings.HasSuffix(fileName, ".csv") { - data := file.ReadFileCSV(localPath) - neId = "" - go s.udmAuthService.InsertCSV(neId, data) + if strings.HasSuffix(body.UploadPath, ".csv") { + data := file.ReadFileCSV(localFilePath) + neId := "" + go s.udmAuthService.InsertData(neId, "csv", data) } - if strings.HasSuffix(fileName, ".txt") { - data := file.ReadFileTXT(",", localPath) - neId = "" - go s.udmAuthService.InsertTxt(neId, data) + if strings.HasSuffix(body.UploadPath, ".txt") { + data := file.ReadFileTXT(",", localFilePath) + neId := "" + go s.udmAuthService.InsertData(neId, "txt", data) } } c.JSON(200, result.OkMsg(data)) diff --git a/src/modules/network_element/controller/udm_sub.go b/src/modules/network_data/controller/udm_sub.go similarity index 62% rename from src/modules/network_element/controller/udm_sub.go rename to src/modules/network_data/controller/udm_sub.go index 1fbcc73f..8841c656 100644 --- a/src/modules/network_element/controller/udm_sub.go +++ b/src/modules/network_data/controller/udm_sub.go @@ -2,19 +2,20 @@ package controller import ( "fmt" + "path/filepath" "strconv" "strings" "time" - mmlclient "be.ems/lib/core/mml_client" "be.ems/src/framework/constants/uploadsubpath" "be.ems/src/framework/i18n" "be.ems/src/framework/utils/ctx" "be.ems/src/framework/utils/file" "be.ems/src/framework/utils/parse" - "be.ems/src/framework/utils/ssh" + "be.ems/src/framework/utils/telnet" "be.ems/src/framework/vo/result" - "be.ems/src/modules/network_element/model" + "be.ems/src/modules/network_data/model" + neDataService "be.ems/src/modules/network_data/service" neService "be.ems/src/modules/network_element/service" "github.com/gin-gonic/gin" "github.com/gin-gonic/gin/binding" @@ -22,21 +23,21 @@ import ( // 实例化控制层 UDMSubController 结构体 var NewUDMSub = &UDMSubController{ - udmSubService: neService.NewUDMSubImpl, + udmSubService: neDataService.NewUDMSubImpl, neInfoService: neService.NewNeInfoImpl, } -// UDM签约用户请求 +// UDM签约用户 // // PATH /udm/sub type UDMSubController struct { - // UDM鉴权信息服务 - udmSubService neService.IUDMSub + // UDM签约信息服务 + udmSubService neDataService.IUDMSub // 网元信息服务 neInfoService neService.INeInfo } -// UDM签约用户-获取全部保存数据库 +// UDM签约用户重载数据 // // POST /resetData/:neId func (s *UDMSubController) ResetData(c *gin.Context) { @@ -48,11 +49,11 @@ func (s *UDMSubController) ResetData(c *gin.Context) { } neId = "" - data := s.udmSubService.Save(neId) + data := s.udmSubService.ResetData(neId) c.JSON(200, result.OkData(data)) } -// UDM签约用户 +// UDM签约用户列表 // // GET /list func (s *UDMSubController) List(c *gin.Context) { @@ -63,7 +64,7 @@ func (s *UDMSubController) List(c *gin.Context) { c.JSON(200, result.Ok(data)) } -// UDM签约用户-信息 +// UDM签约用户信息 // // GET /:neId/:imsi func (s *UDMSubController) Info(c *gin.Context) { @@ -82,10 +83,16 @@ func (s *UDMSubController) Info(c *gin.Context) { return } - msg := fmt.Sprintf("dsp udmuser:imsi=%s", imsi) + telnetClient, err := s.neInfoService.NeRunTelnetClient("UDM", neId, 1) + if err != nil { + c.JSON(200, result.ErrMsg(err.Error())) + return + } + defer telnetClient.Close() // 发送MML - data, err := mmlclient.MMLSendMsgToMap(neInfo.IP, msg) + cmd := fmt.Sprintf("dsp udmuser:imsi=%s", imsi) + data, err := telnet.ConvertToMap(telnetClient, cmd) if err != nil { c.JSON(200, result.ErrMsg(err.Error())) return @@ -104,8 +111,9 @@ func (s *UDMSubController) Info(c *gin.Context) { if imsMsisdnLen != -1 { msisdn = msisdn[:imsMsisdnLen] } - userInfo := model.UDMSub{ - Imsi: imsi, + neId = "" + u := model.UDMSub{ + IMSI: imsi, Msisdn: msisdn, Ambr: data["AMBR"], Arfb: data["AreaForbidden"], @@ -115,35 +123,37 @@ func (s *UDMSubController) Info(c *gin.Context) { Nssai: data["NSSAI"], SmfSel: data["Smf-Selection"], Rat: fmt.Sprint(rat), + NeId: neId, } // 1,64,24,65,def_eps,1,2,010200000000,- if v, ok := data["EPS-Data"]; ok { - userInfo.EpsDat = v + u.EpsDat = v arr := strings.Split(v, ",") - userInfo.EpsFlag = arr[0] - userInfo.EpsOdb = arr[1] - userInfo.HplmnOdb = arr[2] - userInfo.Ard = arr[3] - userInfo.Epstpl = arr[4] - userInfo.ContextId = arr[5] - userInfo.ApnContext = arr[7] - userInfo.StaticIp = arr[8] + u.EpsFlag = arr[0] + u.EpsOdb = arr[1] + u.HplmnOdb = arr[2] + u.Ard = arr[3] + u.Epstpl = arr[4] + u.ContextId = arr[5] + u.ApnContext = arr[7] + // [6] 是不要的,导入和导出不用 + u.StaticIp = arr[8] } - // 查询数据库是否存在并存入更新 - neId = "" - list := s.udmSubService.List(model.UDMSub{NeID: neId, Imsi: imsi}) + // 查询imsi存在赋予id用于更新 + list := s.udmSubService.SelectList(u) if len(list) > 0 { - listItme := list[0] - userInfo.ID = listItme.ID - s.udmSubService.Update(neId, userInfo) - } else { - s.udmSubService.Insert(neId, userInfo) + item := list[0] + if item.ID != "" { + u.ID = item.ID + } } - c.JSON(200, result.OkData(userInfo)) + go s.udmSubService.Insert(neId, u) + + c.JSON(200, result.OkData(u)) } -// UDM签约用户-增加 +// UDM签约用户新增 // // POST /:neId func (s *UDMSubController) Add(c *gin.Context) { @@ -156,7 +166,7 @@ func (s *UDMSubController) Add(c *gin.Context) { var body model.UDMSub err := c.ShouldBindBodyWith(&body, binding.JSON) - if err != nil || body.Imsi == "" { + if err != nil || body.IMSI == "" { c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) return } @@ -168,15 +178,21 @@ func (s *UDMSubController) Add(c *gin.Context) { return } - msg := fmt.Sprintf("add udmuser:imsi=%s,msisdn=%s,ambr=%s,nssai=%s,arfb=%s,sar=%s,rat=%s,cn=%s,smf_sel=%s,sm_data=%s,eps_flag=%s,eps_odb=%s,hplmn_odb=%s,ard=%s,epstpl=%s,context_id=%s,apn_context=%s", - body.Imsi, body.Msisdn, body.Ambr, body.Nssai, body.Arfb, body.Sar, body.Rat, body.Cn, body.SmfSel, body.SmData, body.EpsFlag, body.EpsOdb, body.HplmnOdb, body.Ard, body.Epstpl, body.ContextId, body.ApnContext) - // static_ip指给4G UE分配的静态IP,没有可不带此字段名,批量添加IP会自动递增 - if body.StaticIp != "" { - msg += fmt.Sprintf(",static_ip=%s", body.StaticIp) + telnetClient, err := s.neInfoService.NeRunTelnetClient("UDM", neId, 1) + if err != nil { + c.JSON(200, result.ErrMsg(err.Error())) + return } + defer telnetClient.Close() // 发送MML - data, err := mmlclient.MMLSendMsgToString(neInfo.IP, msg) + cmd := fmt.Sprintf("add udmuser:imsi=%s,msisdn=%s,ambr=%s,nssai=%s,arfb=%s,sar=%s,rat=%s,cn=%s,smf_sel=%s,sm_data=%s,eps_flag=%s,eps_odb=%s,hplmn_odb=%s,ard=%s,epstpl=%s,context_id=%s,apn_context=%s", + body.IMSI, body.Msisdn, body.Ambr, body.Nssai, body.Arfb, body.Sar, body.Rat, body.Cn, body.SmfSel, body.SmData, body.EpsFlag, body.EpsOdb, body.HplmnOdb, body.Ard, body.Epstpl, body.ContextId, body.ApnContext) + // static_ip指给4G UE分配的静态IP,没有可不带此字段名,批量添加IP会自动递增 + if body.StaticIp != "" { + cmd += fmt.Sprintf(",static_ip=%s", body.StaticIp) + } + data, err := telnet.ConvertToStr(telnetClient, cmd) if err != nil { c.JSON(200, result.ErrMsg(err.Error())) return @@ -185,12 +201,12 @@ func (s *UDMSubController) Add(c *gin.Context) { // 命令ok时 if strings.Contains(data, "ok") { neId = "" - s.udmSubService.Insert(neId, body) + go s.udmSubService.Insert(neId, body) } c.JSON(200, result.OkData(data)) } -// UDM签约用户-批量添加 +// UDM签约用户批量新增 // // POST /:neId/:num func (s *UDMSubController) Adds(c *gin.Context) { @@ -204,7 +220,7 @@ func (s *UDMSubController) Adds(c *gin.Context) { var body model.UDMSub err := c.ShouldBindBodyWith(&body, binding.JSON) - if err != nil || body.Imsi == "" { + if err != nil || body.IMSI == "" { c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) return } @@ -216,15 +232,21 @@ func (s *UDMSubController) Adds(c *gin.Context) { return } - msg := fmt.Sprintf("baa udmuser:start_imsi=%s,start_msisdn=%s,sub_num=%s,ambr=%s,nssai=%s,arfb=%s,sar=%s,rat=%s,cn=%s,smf_sel=%s,sm_data=%s,eps_flag=%s,eps_odb=%s,hplmn_odb=%s,ard=%s,epstpl=%s,context_id=%s,apn_context=%s", - body.Imsi, body.Msisdn, num, body.Ambr, body.Nssai, body.Arfb, body.Sar, body.Rat, body.Cn, body.SmfSel, body.SmData, body.EpsFlag, body.EpsOdb, body.HplmnOdb, body.Ard, body.Epstpl, body.ContextId, body.ApnContext) - // static_ip指给4G UE分配的静态IP,没有可不带此字段名,批量添加IP会自动递增 - if body.StaticIp != "" { - msg += fmt.Sprintf(",static_ip=%s", body.StaticIp) + telnetClient, err := s.neInfoService.NeRunTelnetClient("UDM", neId, 1) + if err != nil { + c.JSON(200, result.ErrMsg(err.Error())) + return } + defer telnetClient.Close() // 发送MML - data, err := mmlclient.MMLSendMsgToString(neInfo.IP, msg) + cmd := fmt.Sprintf("baa udmuser:start_imsi=%s,start_msisdn=%s,sub_num=%s,ambr=%s,nssai=%s,arfb=%s,sar=%s,rat=%s,cn=%s,smf_sel=%s,sm_data=%s,eps_flag=%s,eps_odb=%s,hplmn_odb=%s,ard=%s,epstpl=%s,context_id=%s,apn_context=%s", + body.IMSI, body.Msisdn, num, body.Ambr, body.Nssai, body.Arfb, body.Sar, body.Rat, body.Cn, body.SmfSel, body.SmData, body.EpsFlag, body.EpsOdb, body.HplmnOdb, body.Ard, body.Epstpl, body.ContextId, body.ApnContext) + // static_ip指给4G UE分配的静态IP,没有可不带此字段名,批量添加IP会自动递增 + if body.StaticIp != "" { + cmd += fmt.Sprintf(",static_ip=%s", body.StaticIp) + } + data, err := telnet.ConvertToStr(telnetClient, cmd) if err != nil { c.JSON(200, result.ErrMsg(err.Error())) return @@ -233,12 +255,12 @@ func (s *UDMSubController) Adds(c *gin.Context) { // 命令ok时 if strings.Contains(data, "ok") { neId = "" - s.udmSubService.Inserts(neId, body, num) + go s.udmSubService.LoadData(neId, body.IMSI, num) } c.JSON(200, result.OkData(data)) } -// UDM签约用户-修改 +// UDM签约用户修改 // // PUT /:neId func (s *UDMSubController) Edit(c *gin.Context) { @@ -251,7 +273,7 @@ func (s *UDMSubController) Edit(c *gin.Context) { var body model.UDMSub err := c.ShouldBindBodyWith(&body, binding.JSON) - if err != nil || body.Imsi == "" { + if err != nil || body.IMSI == "" { c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) return } @@ -263,65 +285,71 @@ func (s *UDMSubController) Edit(c *gin.Context) { return } - msg := fmt.Sprintf("mod udmuser:imsi=%s", body.Imsi) - // 修改的参数名称 - if body.Msisdn != "" { - msg += fmt.Sprintf(",msisdn=%s", body.Msisdn) - } - if body.Ambr != "" { - msg += fmt.Sprintf(",ambr=%s", body.Ambr) - } - if body.Nssai != "" { - msg += fmt.Sprintf(",nssai=%s", body.Nssai) - } - if body.Arfb != "" { - msg += fmt.Sprintf(",arfb=%s", body.Arfb) - } - if body.Sar != "" { - msg += fmt.Sprintf(",sar=%s", body.Sar) - } - if body.Rat != "" { - msg += fmt.Sprintf(",rat=%s", body.Rat) - } - if body.Cn != "" { - msg += fmt.Sprintf(",cn=%s", body.Cn) - } - if body.SmfSel != "" { - msg += fmt.Sprintf(",smf_sel=%s", body.SmfSel) - } - if body.SmData != "" { - msg += fmt.Sprintf(",sm_data=%s", body.SmData) - } - if body.EpsDat != "" { - msg += fmt.Sprintf(",eps_dat=%s", body.EpsDat) - } - if body.EpsFlag != "" { - msg += fmt.Sprintf(",eps_flag=%s", body.EpsFlag) - } - if body.EpsOdb != "" { - msg += fmt.Sprintf(",eps_odb=%s", body.EpsOdb) - } - if body.HplmnOdb != "" { - msg += fmt.Sprintf(",hplmn_odb=%s", body.HplmnOdb) - } - if body.Epstpl != "" { - msg += fmt.Sprintf(",epstpl=%s", body.Epstpl) - } - if body.Ard != "" { - msg += fmt.Sprintf(",ard=%s", body.Ard) - } - if body.ContextId != "" { - msg += fmt.Sprintf(",context_id=%s", body.ContextId) - } - if body.ApnContext != "" { - msg += fmt.Sprintf(",apn_context=%s", body.ApnContext) - } - if body.StaticIp != "" { - msg += fmt.Sprintf(",static_ip=%s", body.StaticIp) + telnetClient, err := s.neInfoService.NeRunTelnetClient("UDM", neId, 1) + if err != nil { + c.JSON(200, result.ErrMsg(err.Error())) + return } + defer telnetClient.Close() // 发送MML - data, err := mmlclient.MMLSendMsgToString(neInfo.IP, msg) + cmd := fmt.Sprintf("mod udmuser:imsi=%s", body.IMSI) + // 修改的参数名称 + if body.Msisdn != "" { + cmd += fmt.Sprintf(",msisdn=%s", body.Msisdn) + } + if body.Ambr != "" { + cmd += fmt.Sprintf(",ambr=%s", body.Ambr) + } + if body.Nssai != "" { + cmd += fmt.Sprintf(",nssai=%s", body.Nssai) + } + if body.Arfb != "" { + cmd += fmt.Sprintf(",arfb=%s", body.Arfb) + } + if body.Sar != "" { + cmd += fmt.Sprintf(",sar=%s", body.Sar) + } + if body.Rat != "" { + cmd += fmt.Sprintf(",rat=%s", body.Rat) + } + if body.Cn != "" { + cmd += fmt.Sprintf(",cn=%s", body.Cn) + } + if body.SmfSel != "" { + cmd += fmt.Sprintf(",smf_sel=%s", body.SmfSel) + } + if body.SmData != "" { + cmd += fmt.Sprintf(",sm_data=%s", body.SmData) + } + if body.EpsDat != "" { + cmd += fmt.Sprintf(",eps_dat=%s", body.EpsDat) + } + if body.EpsFlag != "" { + cmd += fmt.Sprintf(",eps_flag=%s", body.EpsFlag) + } + if body.EpsOdb != "" { + cmd += fmt.Sprintf(",eps_odb=%s", body.EpsOdb) + } + if body.HplmnOdb != "" { + cmd += fmt.Sprintf(",hplmn_odb=%s", body.HplmnOdb) + } + if body.Epstpl != "" { + cmd += fmt.Sprintf(",epstpl=%s", body.Epstpl) + } + if body.Ard != "" { + cmd += fmt.Sprintf(",ard=%s", body.Ard) + } + if body.ContextId != "" { + cmd += fmt.Sprintf(",context_id=%s", body.ContextId) + } + if body.ApnContext != "" { + cmd += fmt.Sprintf(",apn_context=%s", body.ApnContext) + } + if body.StaticIp != "" { + cmd += fmt.Sprintf(",static_ip=%s", body.StaticIp) + } + data, err := telnet.ConvertToStr(telnetClient, cmd) if err != nil { c.JSON(200, result.ErrMsg(err.Error())) return @@ -330,12 +358,12 @@ func (s *UDMSubController) Edit(c *gin.Context) { // 命令ok时 if strings.Contains(data, "ok") { neId = "" - s.udmSubService.Update(neId, body) + go s.udmSubService.Insert(neId, body) } c.JSON(200, result.OkData(data)) } -// UDM签约用户-删除 +// UDM签约用户删除 // // DELETE /:neId/:imsi func (s *UDMSubController) Remove(c *gin.Context) { @@ -362,27 +390,34 @@ func (s *UDMSubController) Remove(c *gin.Context) { return } + telnetClient, err := s.neInfoService.NeRunTelnetClient("UDM", neId, 1) + if err != nil { + c.JSON(200, result.ErrMsg(err.Error())) + return + } + defer telnetClient.Close() + resultData := map[string]string{} for _, imsi := range uniqueIDs { - msg := fmt.Sprintf("del udmuser:imsi=%s", imsi) - // 发送MML - data, err := mmlclient.MMLSendMsgToString(neInfo.IP, msg) + cmd := fmt.Sprintf("del udmuser:imsi=%s", imsi) + data, err := telnet.ConvertToStr(telnetClient, cmd) if err != nil { resultData[imsi] = err.Error() + continue } // 命令ok时 if strings.Contains(data, "ok") { neId = "" - s.udmSubService.Delete(neId, imsi) - resultData[imsi] = data + go s.udmSubService.Delete(neId, imsi) } + resultData[imsi] = data } c.JSON(200, result.OkData(resultData)) } -// UDM签约用户-批量删除 +// UDM签约用户批量删除 // // DELETE /:neId/:imsi/:num func (s *UDMSubController) Removes(c *gin.Context) { @@ -402,10 +437,16 @@ func (s *UDMSubController) Removes(c *gin.Context) { return } - msg := fmt.Sprintf("bde udmuser:start_imsi=%s,sub_num=%s", imsi, num) + telnetClient, err := s.neInfoService.NeRunTelnetClient("UDM", neId, 1) + if err != nil { + c.JSON(200, result.ErrMsg(err.Error())) + return + } + defer telnetClient.Close() // 发送MML - data, err := mmlclient.MMLSendMsgToString(neInfo.IP, msg) + cmd := fmt.Sprintf("bde udmuser:start_imsi=%s,sub_num=%s", imsi, num) + data, err := telnet.ConvertToStr(telnetClient, cmd) if err != nil { c.JSON(200, result.ErrMsg(err.Error())) return @@ -414,12 +455,12 @@ func (s *UDMSubController) Removes(c *gin.Context) { // 命令ok时 if strings.Contains(data, "ok") { neId = "" - s.udmSubService.Deletes(neId, imsi, num) + go s.udmSubService.LoadData(neId, imsi, num) } c.JSON(200, result.OkData(data)) } -// UDM签约用户-导出 +// UDM签约用户导出 // // POST /export func (s *UDMSubController) Export(c *gin.Context) { @@ -440,9 +481,9 @@ func (s *UDMSubController) Export(c *gin.Context) { } neId := "" - list := s.udmSubService.List(model.UDMSub{NeID: neId}) + list := s.udmSubService.SelectList(model.UDMSub{NeId: neId}) // 文件名 - fileName := fmt.Sprintf("OMC_SUB_USER_EXPORT_%s_%d.%s", neId, time.Now().UnixMilli(), body.Type) + fileName := fmt.Sprintf("udm_sub_user_export_%s_%d.%s", neId, time.Now().UnixMilli(), body.Type) filePath := fmt.Sprintf("%s/%s", file.ParseUploadFileDir(uploadsubpath.EXPORT), fileName) if body.Type == "csv" { @@ -451,7 +492,7 @@ func (s *UDMSubController) Export(c *gin.Context) { data = append(data, []string{"imsi", "msisdn", "ambr", "nssai", "arfb", "sar", "rat", "cn", "smf_sel", "sm_dat", "eps_dat"}) for _, v := range list { epsDat := fmt.Sprintf("%s,%s,%s,%s,%s,%s,%s,%s", v.EpsFlag, v.EpsOdb, v.HplmnOdb, v.Ard, v.Epstpl, v.ContextId, v.ApnContext, v.StaticIp) - data = append(data, []string{v.Imsi, v.Msisdn, v.Ambr, v.Nssai, v.Arfb, v.Sar, v.Rat, v.Cn, v.SmfSel, v.SmData, epsDat}) + data = append(data, []string{v.IMSI, v.Msisdn, v.Ambr, v.Nssai, v.Arfb, v.Sar, v.Rat, v.Cn, v.SmfSel, v.SmData, epsDat}) } // 输出到文件 err = file.WriterFileCSV(data, filePath) @@ -466,7 +507,7 @@ func (s *UDMSubController) Export(c *gin.Context) { data := [][]string{} for _, v := range list { epsDat := fmt.Sprintf("%s,%s,%s,%s,%s,%s,%s,%s", v.EpsFlag, v.EpsOdb, v.HplmnOdb, v.Ard, v.Epstpl, v.ContextId, v.ApnContext, v.StaticIp) - data = append(data, []string{v.Imsi, v.Msisdn, v.Ambr, v.Nssai, v.Arfb, v.Sar, v.Rat, v.Cn, v.SmfSel, v.SmData, epsDat}) + data = append(data, []string{v.IMSI, v.Msisdn, v.Ambr, v.Nssai, v.Arfb, v.Sar, v.Rat, v.Cn, v.SmfSel, v.SmData, epsDat}) } // 输出到文件 err = file.WriterFileTXT(data, ",", filePath) @@ -479,55 +520,68 @@ func (s *UDMSubController) Export(c *gin.Context) { c.FileAttachment(filePath, fileName) } -// UDM签约用户-导入 +// UDM签约用户导入 // // POST /import func (s *UDMSubController) Import(c *gin.Context) { language := ctx.AcceptLanguage(c) - neId := c.PostForm("neId") - if neId == "" { + var body struct { + NeId string `json:"neId" binding:"required"` + UploadPath string `json:"uploadPath" binding:"required"` + } + if err := c.ShouldBindBodyWith(&body, binding.JSON); err != nil { c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) return } - formFile, err := c.FormFile("file") - if err != nil { - c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) - return - } - // 获取文件名 - if !(strings.HasSuffix(formFile.Filename, ".csv") || strings.HasSuffix(formFile.Filename, ".txt")) { + + // 判断文件名 + if !(strings.HasSuffix(body.UploadPath, ".csv") || strings.HasSuffix(body.UploadPath, ".txt")) { c.JSON(200, result.ErrMsg(i18n.TKey(language, "ne.udm.errImportUserSubFileFormat"))) return } - // 上传文件转存 - upFilePath, err := file.TransferUploadFile(formFile, uploadsubpath.IMPORT, nil) - if err != nil { - c.JSON(200, result.ErrMsg(err.Error())) - return - } // 查询网元获取IP - neInfo := s.neInfoService.SelectNeInfoByNeTypeAndNeID("UDM", neId) - if neInfo.NeId != neId || neInfo.IP == "" { + neInfo := s.neInfoService.SelectNeInfoByNeTypeAndNeID("UDM", body.NeId) + if neInfo.NeId != body.NeId || neInfo.IP == "" { c.JSON(200, result.ErrMsg(i18n.TKey(language, "app.common.noNEInfo"))) return } - // 本地文件 - localPath := file.ParseUploadFilePath(upFilePath) - nePath := "/tmp" //config.Get("mml.upload").(string) - // 复制到远程 - err = ssh.FileSCPLocalToNe(neInfo.IP, localPath, nePath) + // 网元主机的SSH客户端 + sshClient, err := s.neInfoService.NeRunSSHClient(neInfo.NeType, neInfo.NeId) if err != nil { c.JSON(200, result.ErrMsg(err.Error())) return } + defer sshClient.Close() + // 网元主机的SSH客户端进行文件传输 + sftpClient, err := sshClient.NewClientSFTP() + if err != nil { + c.JSON(200, result.ErrMsg(err.Error())) + return + } + defer sftpClient.Close() - fileName := localPath[strings.LastIndex(localPath, "/")+1:] - msg := fmt.Sprintf("import udmuser:path=%s", fmt.Sprintf("%s/%s", nePath, fileName)) + // 本地文件 + localFilePath := file.ParseUploadFilePath(body.UploadPath) + neFilePath := fmt.Sprintf("/tmp/%s", filepath.Base(localFilePath)) + // 复制到远程 + if err = sftpClient.CopyFileLocalToRemote(localFilePath, neFilePath); err != nil { + c.JSON(200, result.ErrMsg("error uploading file")) + return + } + + // 网元主机的Telnet客户端 + telnetClient, err := s.neInfoService.NeRunTelnetClient(neInfo.NeType, neInfo.NeId, 1) + if err != nil { + c.JSON(200, result.ErrMsg(err.Error())) + return + } + defer telnetClient.Close() // 发送MML - data, err := mmlclient.MMLSendMsgToString(neInfo.IP, msg) + cmd := fmt.Sprintf("import udmuser:path=%s", neFilePath) + data, err := telnet.ConvertToStr(telnetClient, cmd) if err != nil { c.JSON(200, result.ErrMsg(err.Error())) return @@ -535,15 +589,15 @@ func (s *UDMSubController) Import(c *gin.Context) { // 命令ok时 if strings.Contains(data, "ok") { - if strings.HasSuffix(fileName, ".csv") { - data := file.ReadFileCSV(localPath) - neId = "" - go s.udmSubService.InsertCSV(neId, data) + if strings.HasSuffix(body.UploadPath, ".csv") { + data := file.ReadFileCSV(localFilePath) + neId := "" + go s.udmSubService.InsertData(neId, "csv", data) } - if strings.HasSuffix(fileName, ".txt") { - data := file.ReadFileTXT(",", localPath) - neId = "" - go s.udmSubService.InsertTxt(neId, data) + if strings.HasSuffix(body.UploadPath, ".txt") { + data := file.ReadFileTXT(",", localFilePath) + neId := "" + go s.udmSubService.InsertData(neId, "txt", data) } } c.JSON(200, result.OkMsg(data)) diff --git a/src/modules/network_data/model/cdr_event.go b/src/modules/network_data/model/cdr_event_ims.go similarity index 83% rename from src/modules/network_data/model/cdr_event.go rename to src/modules/network_data/model/cdr_event_ims.go index ae49041f..ffe280c5 100644 --- a/src/modules/network_data/model/cdr_event.go +++ b/src/modules/network_data/model/cdr_event_ims.go @@ -2,20 +2,20 @@ package model import "time" -// CDREvent CDR会话对象 cdr_event_ims/cdr_event_smf -type CDREvent struct { +// CDREventIMS CDR会话对象IMS cdr_event_ims +type CDREventIMS struct { ID string `json:"id" gorm:"column:id;primaryKey;autoIncrement"` NeType string `json:"neType" gorm:"column:ne_type"` NeName string `json:"neName" gorm:"column:ne_name"` - RmUID string `json:"rmUID" gorm:"column:rm_uid"` + RmUID string `json:"rmUID" gorm:"column:rm_uid"` // 可能没有 Timestamp int64 `json:"timestamp" gorm:"column:timestamp"` CDRJSONStr string `json:"cdrJSON" gorm:"column:cdr_json"` CreatedAt time.Time `json:"createdAt" gorm:"column:created_at;default:CURRENT_TIMESTAMP"` } -// CDREventQuery CDR会话对象查询参数结构体 -type CDREventQuery struct { - NeType string `json:"neType" form:"neType" binding:"required"` // 网元类型 +// CDREventIMSQuery CDR会话对象IMS查询参数结构体 +type CDREventIMSQuery struct { + NeType string `json:"neType" form:"neType" binding:"required"` // 网元类型IMS NeID string `json:"neId" form:"neId" binding:"required"` RmUID string `json:"rmUID" form:"rmUID"` RecordType string `json:"recordType" form:"recordType"` // 记录行为 MOC MTC MOSM MTSM diff --git a/src/modules/network_data/model/cdr_event_smf.go b/src/modules/network_data/model/cdr_event_smf.go index 0234f91c..259c1025 100644 --- a/src/modules/network_data/model/cdr_event_smf.go +++ b/src/modules/network_data/model/cdr_event_smf.go @@ -2,29 +2,34 @@ package model import "time" -// CDREvent CDR会话对象 cdr_event_smf +// CDREventSMF CDR会话对象SMF cdr_event_smf type CDREventSMF struct { - ID string `json:"id" gorm:"column:id;primaryKey;autoIncrement"` - NeType string `json:"neType" gorm:"column:ne_type"` - NeName string `json:"neName" gorm:"column:ne_name"` - RmUID string `json:"rmUID" gorm:"column:rm_uid"` - Timestamp int64 `json:"timestamp" gorm:"column:timestamp"` - RecordType string `json:"recordType" gorm:"column:record_type"` - ChargingID string `json:"chargingID" gorm:"column:charging_id"` - SubscriberID string `json:"subscriberID" gorm:"column:subscriber_id"` - Duration string `json:"duration" gorm:"column:duration"` - DataVolumeUplink string `json:"dataVolumeUplink" gorm:"column:data_volume_uplink"` - DataVolumeDownlink string `json:"dataVolumeDownlink" gorm:"column:data_volume_downlink"` - DataTotalVolume string `json:"dataTotalVolume" gorm:"column:data_total_volume"` - PDUAddress string `json:"pduAddress" gorm:"column:pdu_address"` - CreatedAt time.Time `json:"createdAt" gorm:"column:created_at;default:CURRENT_TIMESTAMP"` + ID string `json:"id" gorm:"column:id;primaryKey;autoIncrement"` + NeType string `json:"neType" gorm:"column:ne_type"` + NeName string `json:"neName" gorm:"column:ne_name"` + RmUID string `json:"rmUID" gorm:"column:rm_uid"` + Timestamp int64 `json:"timestamp" gorm:"column:timestamp"` + CDRJSONStr string `json:"cdrJSON" gorm:"column:cdr_json"` + CreatedAt time.Time `json:"createdAt" gorm:"column:created_at;default:CURRENT_TIMESTAMP"` + + // ====== 非数据库字段属性 ====== + + // RecordType string `json:"recordType" gorm:"column:record_type"` + // ChargingID string `json:"chargingID" gorm:"column:charging_id"` + // SubscriberID string `json:"subscriberID" gorm:"column:subscriber_id"` + // Duration string `json:"duration" gorm:"column:duration"` + // DataVolumeUplink string `json:"dataVolumeUplink" gorm:"column:data_volume_uplink"` + // DataVolumeDownlink string `json:"dataVolumeDownlink" gorm:"column:data_volume_downlink"` + // DataTotalVolume string `json:"dataTotalVolume" gorm:"column:data_total_volume"` + // PDUAddress string `json:"pduAddress" gorm:"column:pdu_address"` } -type SMFCDREventQuery struct { +// CDREventSMFQuery CDR会话对象SMF查询参数结构体 +type CDREventSMFQuery struct { NeType string `json:"neType" form:"neType" binding:"required"` // SMF NeID string `json:"neId" form:"neId" binding:"required"` RmUID string `json:"rmUID" form:"rmUID"` - RecordType string `json:"recordType" form:"recordType"` + RecordType string `json:"recordType" form:"recordType"` // 暂时没用到 SubscriberID string `json:"subscriberID" form:"subscriberID"` StartTime string `json:"startTime" form:"startTime"` EndTime string `json:"endTime" form:"endTime"` diff --git a/src/modules/network_element/model/udm_auth.go b/src/modules/network_data/model/udm_auth.go similarity index 81% rename from src/modules/network_element/model/udm_auth.go rename to src/modules/network_data/model/udm_auth.go index 9069858d..6f7c1d17 100644 --- a/src/modules/network_element/model/udm_auth.go +++ b/src/modules/network_data/model/udm_auth.go @@ -3,13 +3,13 @@ package model // UDMAuth UDM鉴权用户对象 u_auth_user type UDMAuth struct { ID string `json:"id" gorm:"column:id;primaryKey;autoIncrement"` // 默认ID - Imsi string `json:"imsi" gorm:"column:imsi"` // SIM卡号 + IMSI string `json:"imsi" gorm:"column:imsi"` // SIM卡号 Amf string `json:"amf" gorm:"column:amf"` // ANF - Status string `json:"status" gorm:"column:status"` // 状态 + Status string `json:"status" gorm:"column:status"` // 状态 默认给1 Ki string `json:"ki" gorm:"column:ki"` // ki AlgoIndex string `json:"algoIndex" gorm:"column:algo_index"` // AlgoIndex Opc string `json:"opc" gorm:"column:opc"` // opc - NeID string `json:"neId" gorm:"column:ne_id"` // UDM网元标识-子系统 + NeId string `json:"neId" gorm:"column:ne_id"` // UDM网元标识-子系统 } func (UDMAuth) TableName() string { diff --git a/src/modules/network_element/model/udm_sub.go b/src/modules/network_data/model/udm_sub.go similarity index 87% rename from src/modules/network_element/model/udm_sub.go rename to src/modules/network_data/model/udm_sub.go index 85fb1ba2..e3d05c4c 100644 --- a/src/modules/network_element/model/udm_sub.go +++ b/src/modules/network_data/model/udm_sub.go @@ -4,7 +4,7 @@ package model type UDMSub struct { ID string `json:"id" gorm:"column:id;primaryKey;autoIncrement"` Msisdn string `json:"msisdn" gorm:"column:msisdn"` // 相当手机号 - Imsi string `json:"imsi" gorm:"column:imsi"` // SIM卡号 + IMSI string `json:"imsi" gorm:"column:imsi"` // SIM卡号 Ambr string `json:"ambr" gorm:"column:ambr"` Nssai string `json:"nssai" gorm:"column:nssai"` Rat string `json:"rat" gorm:"column:rat"` @@ -14,7 +14,7 @@ type UDMSub struct { SmData string `json:"smData" gorm:"column:sm_data"` SmfSel string `json:"smfSel" gorm:"column:smf_sel"` EpsDat string `json:"epsDat" gorm:"column:eps_dat"` - NeID string `json:"neId" gorm:"column:ne_id"` // UDM网元标识-子系统 + NeId string `json:"neId" gorm:"column:ne_id"` // UDM网元标识-子系统 EpsFlag string `json:"epsFlag" gorm:"column:eps_flag"` EpsOdb string `json:"epsOdb" gorm:"column:eps_odb"` @@ -29,7 +29,6 @@ type UDMSub struct { // ====== 非数据库字段属性 ====== - SubNum string `json:"subNum,omitempty" gorm:"-"` // 批量数 } func (UDMSub) TableName() string { diff --git a/src/modules/network_data/model/ue_event.go b/src/modules/network_data/model/ue_event_amf.go similarity index 83% rename from src/modules/network_data/model/ue_event.go rename to src/modules/network_data/model/ue_event_amf.go index 40454652..6fa549bd 100644 --- a/src/modules/network_data/model/ue_event.go +++ b/src/modules/network_data/model/ue_event_amf.go @@ -2,20 +2,20 @@ package model import "time" -// UEEvent UE会话对象 ue_event -type UEEvent struct { +// UEEventAMF UE会话对象AMF ue_event_amf +type UEEventAMF struct { ID string `json:"id" gorm:"column:id;primaryKey;autoIncrement"` NeType string `json:"neType" gorm:"column:ne_type"` NeName string `json:"neName" gorm:"column:ne_name"` - RmUID string `json:"rmUID" gorm:"column:rm_uid"` + RmUID string `json:"rmUID" gorm:"column:rm_uid"` // 可能没有 Timestamp int64 `json:"timestamp" gorm:"column:timestamp"` - EventType string `json:"eventType" gorm:"column:event_type"` + EventType string `json:"eventType" gorm:"column:event_type"` // 事件类型 auth-result detach cm-state EventJSONStr string `json:"eventJSON" gorm:"column:event_json"` CreatedAt time.Time `json:"createdAt" gorm:"column:created_at;default:CURRENT_TIMESTAMP"` } -// UEEventQuery UE会话对象查询参数结构体 -type UEEventQuery struct { +// UEEventAMFQuery UE会话对象AMF查询参数结构体 +type UEEventAMFQuery struct { NeType string `json:"neType" form:"neType" binding:"required"` // 网元类型, 暂时支持AMF NeID string `json:"neId" form:"neId" binding:"required"` RmUID string `json:"rmUID" form:"rmUID"` diff --git a/src/modules/network_data/model/ue_event_mme.go b/src/modules/network_data/model/ue_event_mme.go new file mode 100644 index 00000000..8ceab120 --- /dev/null +++ b/src/modules/network_data/model/ue_event_mme.go @@ -0,0 +1,30 @@ +package model + +import "time" + +// UEEventMME UE会话对象MME ue_event_mme +type UEEventMME struct { + ID string `json:"id" gorm:"column:id;primaryKey;autoIncrement"` + NeType string `json:"neType" gorm:"column:ne_type"` + NeName string `json:"neName" gorm:"column:ne_name"` + RmUID string `json:"rmUID" gorm:"column:rm_uid"` // 可能没有 + Timestamp int64 `json:"timestamp" gorm:"column:timestamp"` + EventType string `json:"eventType" gorm:"column:event_type"` // 事件类型 auth-result detach cm-state + EventJSONStr string `json:"eventJSON" gorm:"column:event_json"` + CreatedAt time.Time `json:"createdAt" gorm:"column:created_at;default:CURRENT_TIMESTAMP"` +} + +// UEEventMMEQuery UE会话对象MME查询参数结构体 +type UEEventMMEQuery struct { + NeType string `json:"neType" form:"neType" binding:"required"` // 网元类型, 暂时支持MME + NeID string `json:"neId" form:"neId" binding:"required"` + RmUID string `json:"rmUID" form:"rmUID"` + EventType string `json:"eventType" form:"eventType"` // 事件类型 auth-result detach cm-state + IMSI string `json:"imsi" form:"imsi"` // imsi + StartTime string `json:"startTime" form:"startTime"` + EndTime string `json:"endTime" form:"endTime"` + SortField string `json:"sortField" form:"sortField" binding:"omitempty,oneof=timestamp"` // 排序字段,填写结果字段 + SortOrder string `json:"sortOrder" form:"sortOrder" binding:"omitempty,oneof=asc desc"` // 排序升降序,asc desc + PageNum int64 `json:"pageNum" form:"pageNum" binding:"required"` + PageSize int64 `json:"pageSize" form:"pageSize" binding:"required"` +} diff --git a/src/modules/network_data/network_data.go b/src/modules/network_data/network_data.go index 8d56e692..1f484641 100644 --- a/src/modules/network_data/network_data.go +++ b/src/modules/network_data/network_data.go @@ -4,6 +4,7 @@ import ( "be.ems/src/framework/logger" "be.ems/src/framework/middleware" "be.ems/src/framework/middleware/collectlogs" + "be.ems/src/framework/middleware/repeat" "be.ems/src/modules/network_data/controller" "github.com/gin-gonic/gin" @@ -44,49 +45,58 @@ func Setup(router *gin.Engine) { // 网元IMS imsGroup := neDataGroup.Group("/ims") { - // CDR会话事件列表 imsGroup.GET("/cdr/list", middleware.PreAuthorize(nil), controller.NewIMSController.CDRList, ) - // CDR会话删除 imsGroup.DELETE("/cdr/:cdrIds", middleware.PreAuthorize(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.imsCDR", collectlogs.BUSINESS_TYPE_DELETE)), controller.NewIMSController.CDRRemove, ) + imsGroup.POST("/cdr/export", + middleware.PreAuthorize(nil), + collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.imsCDR", collectlogs.BUSINESS_TYPE_EXPORT)), + controller.NewIMSController.CDRExport, + ) } // 网元SMF smfGroup := neDataGroup.Group("/smf") { - // CDR会话事件列表 smfGroup.GET("/cdr/list", middleware.PreAuthorize(nil), controller.NewSMFController.CDRList, ) - // CDR会话删除 smfGroup.DELETE("/cdr/:cdrIds", middleware.PreAuthorize(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.smfCDR", collectlogs.BUSINESS_TYPE_DELETE)), controller.NewSMFController.CDRRemove, ) + smfGroup.POST("/cdr/export", + middleware.PreAuthorize(nil), + collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.smfCDR", collectlogs.BUSINESS_TYPE_EXPORT)), + controller.NewSMFController.CDRExport, + ) } // 网元AMF amfGroup := neDataGroup.Group("/amf") { - // UE会话事件 amfGroup.GET("/ue/list", middleware.PreAuthorize(nil), controller.NewAMFController.UEList, ) - // UE会话删除 amfGroup.DELETE("/ue/:ueIds", middleware.PreAuthorize(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.amfUE", collectlogs.BUSINESS_TYPE_DELETE)), controller.NewAMFController.UERemove, ) + amfGroup.POST("/ue/export", + middleware.PreAuthorize(nil), + collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.amfUE", collectlogs.BUSINESS_TYPE_EXPORT)), + controller.NewAMFController.UEExport, + ) } // 网元UPF @@ -98,4 +108,130 @@ func Setup(router *gin.Engine) { ) } + // 网元UDM 鉴权用户信息 + udmAuthGroup := neDataGroup.Group("/udm/auth") + { + udmAuthGroup.PUT("/resetData/:neId", + repeat.RepeatSubmit(5), + middleware.PreAuthorize(nil), + collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmAuth", collectlogs.BUSINESS_TYPE_CLEAN)), + controller.NewUDMAuth.ResetData, + ) + udmAuthGroup.GET("/list", + middleware.PreAuthorize(nil), + controller.NewUDMAuth.List, + ) + udmAuthGroup.GET("/:neId/:imsi", + middleware.PreAuthorize(nil), + controller.NewUDMAuth.Info, + ) + udmAuthGroup.POST("/:neId", + middleware.PreAuthorize(nil), + collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmAuth", collectlogs.BUSINESS_TYPE_INSERT)), + controller.NewUDMAuth.Add, + ) + udmAuthGroup.POST("/:neId/:num", + middleware.PreAuthorize(nil), + collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmAuth", collectlogs.BUSINESS_TYPE_INSERT)), + controller.NewUDMAuth.Adds, + ) + udmAuthGroup.PUT("/:neId", + middleware.PreAuthorize(nil), + collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmAuth", collectlogs.BUSINESS_TYPE_UPDATE)), + controller.NewUDMAuth.Edit, + ) + udmAuthGroup.DELETE("/:neId/:imsi", + middleware.PreAuthorize(nil), + collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmAuth", collectlogs.BUSINESS_TYPE_DELETE)), + controller.NewUDMAuth.Remove, + ) + udmAuthGroup.DELETE("/:neId/:imsi/:num", + middleware.PreAuthorize(nil), + collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmAuth", collectlogs.BUSINESS_TYPE_DELETE)), + controller.NewUDMAuth.Removes, + ) + udmAuthGroup.POST("/export", + middleware.PreAuthorize(nil), + collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmAuth", collectlogs.BUSINESS_TYPE_EXPORT)), + controller.NewUDMAuth.Export, + ) + udmAuthGroup.POST("/import", + middleware.PreAuthorize(nil), + collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmAuth", collectlogs.BUSINESS_TYPE_IMPORT)), + controller.NewUDMAuth.Import, + ) + } + + // 网元UDM 签约用户信息 + udmSubGroup := neDataGroup.Group("/udm/sub") + { + udmSubGroup.PUT("/resetData/:neId", + repeat.RepeatSubmit(5), + middleware.PreAuthorize(nil), + collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmSub", collectlogs.BUSINESS_TYPE_CLEAN)), + controller.NewUDMSub.ResetData, + ) + udmSubGroup.GET("/list", + middleware.PreAuthorize(nil), + controller.NewUDMSub.List, + ) + udmSubGroup.GET("/:neId/:imsi", + middleware.PreAuthorize(nil), + controller.NewUDMSub.Info, + ) + udmSubGroup.POST("/:neId", + middleware.PreAuthorize(nil), + collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmSub", collectlogs.BUSINESS_TYPE_INSERT)), + controller.NewUDMSub.Add, + ) + udmSubGroup.POST("/:neId/:num", + middleware.PreAuthorize(nil), + collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmSub", collectlogs.BUSINESS_TYPE_INSERT)), + controller.NewUDMSub.Adds, + ) + udmSubGroup.PUT("/:neId", + middleware.PreAuthorize(nil), + collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmSub", collectlogs.BUSINESS_TYPE_UPDATE)), + controller.NewUDMSub.Edit, + ) + udmSubGroup.DELETE("/:neId/:imsi", + middleware.PreAuthorize(nil), + collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmSub", collectlogs.BUSINESS_TYPE_DELETE)), + controller.NewUDMSub.Remove, + ) + udmSubGroup.DELETE("/:neId/:imsi/:num", + middleware.PreAuthorize(nil), + collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmSub", collectlogs.BUSINESS_TYPE_DELETE)), + controller.NewUDMSub.Removes, + ) + udmSubGroup.POST("/export", + middleware.PreAuthorize(nil), + collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmSub", collectlogs.BUSINESS_TYPE_EXPORT)), + controller.NewUDMSub.Export, + ) + udmSubGroup.POST("/import", + middleware.PreAuthorize(nil), + collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmSub", collectlogs.BUSINESS_TYPE_IMPORT)), + controller.NewUDMSub.Import, + ) + } + + // 网元MME + mmeGroup := neDataGroup.Group("/mme") + { + mmeGroup.GET("/ue/list", + middleware.PreAuthorize(nil), + controller.NewMMEController.UEList, + ) + mmeGroup.DELETE("/ue/:ueIds", + middleware.PreAuthorize(nil), + collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.mmeUE", collectlogs.BUSINESS_TYPE_DELETE)), + controller.NewMMEController.UERemove, + ) + mmeGroup.POST("/ue/export", + middleware.PreAuthorize(nil), + collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.mmeUE", collectlogs.BUSINESS_TYPE_EXPORT)), + controller.NewMMEController.UEExport, + ) + } } diff --git a/src/modules/network_data/repository/cdr_event.go b/src/modules/network_data/repository/cdr_event.go deleted file mode 100644 index bd5c562e..00000000 --- a/src/modules/network_data/repository/cdr_event.go +++ /dev/null @@ -1,27 +0,0 @@ -package repository - -import "be.ems/src/modules/network_data/model" - -// CDR会话事件 数据层接口 -type ICDREvent interface { - // SelectPage 根据条件分页查询 - SelectPage(querys model.CDREventQuery) map[string]any - - // SelectByIds 通过ID查询 - SelectByIds(cdrIds []string) []model.CDREvent - - // DeleteByIds 批量删除信息 - DeleteByIds(cdrIds []string) int64 -} - -// SMF CDR Event -type SMFCDREvent interface { - // SelectPage 根据条件分页查询 - SelectPage(querys model.SMFCDREventQuery) map[string]any - - // SelectByIds 通过ID查询 - SelectByIds(cdrIds []string) []model.CDREventSMF - - // DeleteByIds 批量删除信息 - DeleteByIds(cdrIds []string) int64 -} diff --git a/src/modules/network_data/repository/cdr_event.impl.go b/src/modules/network_data/repository/cdr_event.impl.go deleted file mode 100644 index c9903b8e..00000000 --- a/src/modules/network_data/repository/cdr_event.impl.go +++ /dev/null @@ -1,344 +0,0 @@ -package repository - -import ( - "fmt" - "strings" - - "be.ems/src/framework/datasource" - "be.ems/src/framework/logger" - "be.ems/src/framework/utils/date" - "be.ems/src/framework/utils/parse" - "be.ems/src/framework/utils/repo" - "be.ems/src/modules/network_data/model" -) - -// 实例化数据层 CDREventImpl 结构体 -var NewCDREventImpl = &CDREventImpl{ - selectSql: `select id, ne_type, ne_name, rm_uid, timestamp, cdr_json, created_at from cdr_event_ims`, - - resultMap: map[string]string{ - "id": "ID", - "ne_type": "NeType", - "ne_name": "NeName", - "rm_uid": "RmUID", - "timestamp": "Timestamp", - "cdr_json": "CDRJSONStr", - "created_at": "CreatedAt", - }, -} - -// CDREventImpl CDR会话事件 数据层处理 -type CDREventImpl struct { - // 查询视图对象SQL - selectSql string - // 结果字段与实体映射 - resultMap map[string]string -} - -// Instance of SMF CDREventImpl -var NewSMFCDREventImpl = &SMFCDREventImpl{ - selectSql: `select id, ne_type, ne_name, rm_uid, timestamp, JSON_EXTRACT(cdr_json, '$.recordType') AS record_type, JSON_EXTRACT(cdr_json, '$.chargingID') AS charging_id, JSON_EXTRACT(cdr_json, '$.subscriberIdentifier.subscriptionIDData') AS subscriber_id, JSON_EXTRACT(cdr_json, '$.duration') AS duration, JSON_EXTRACT(cdr_json, '$.listOfMultipleUnitUsage[*].usedUnitContainer[*].dataVolumeUplink') AS data_volume_uplink, JSON_EXTRACT(cdr_json, '$.listOfMultipleUnitUsage[*].usedUnitContainer[*].dataVolumeDownlink') AS data_volume_downlink, JSON_EXTRACT(cdr_json, '$.listOfMultipleUnitUsage[*].usedUnitContainer[*].dataTotalVolume') AS data_total_volume, JSON_EXTRACT(cdr_json, '$.pDUSessionChargingInformation.pDUAddress') AS pdu_address, created_at from cdr_event_smf`, - - resultMap: map[string]string{ - "id": "ID", - "ne_type": "NeType", - "ne_name": "NeName", - "rm_uid": "RmUID", - "timestamp": "Timestamp", - "record_type": "RecordType", - "charging_id": "ChargingID", - "subscriber_id": "SubscriberID", - "duration": "Duration", - "data_volume_uplink": "DataVolumeUplink", - "data_volume_downlink": "DataVolumeDownlink", - "data_total_volume": "DataTotalVolume", - "pdu_address": "PDUAddress", - "created_at": "CreatedAt", - }, -} - -// CDREventImpl CDR会话事件 数据层处理 -type SMFCDREventImpl struct { - // 查询视图对象SQL - selectSql string - // 结果字段与实体映射 - resultMap map[string]string -} - -// convertResultRows 将结果记录转实体结果组 -func (r *CDREventImpl) convertResultRows(rows []map[string]any) []model.CDREvent { - arr := make([]model.CDREvent, 0) - for _, row := range rows { - item := model.CDREvent{} - for key, value := range row { - if keyMapper, ok := r.resultMap[key]; ok { - repo.SetFieldValue(&item, keyMapper, value) - } - } - arr = append(arr, item) - } - return arr -} - -// SelectPage 根据条件分页查询 -func (r *CDREventImpl) SelectPage(querys model.CDREventQuery) map[string]any { - // 查询条件拼接 - var conditions []string - var params []any - if querys.NeType != "" { - conditions = append(conditions, "ne_type = ?") - params = append(params, querys.NeType) - } - if querys.RmUID != "" { - conditions = append(conditions, "rm_uid = ?") - params = append(params, querys.RmUID) - } - if querys.StartTime != "" { - conditions = append(conditions, "timestamp >= ?") - beginDate := date.ParseStrToDate(querys.StartTime, date.YYYY_MM_DD_HH_MM_SS) - params = append(params, beginDate.Unix()) - } - if querys.EndTime != "" { - conditions = append(conditions, "timestamp <= ?") - endDate := date.ParseStrToDate(querys.EndTime, date.YYYY_MM_DD_HH_MM_SS) - params = append(params, endDate.Unix()) - } - if querys.CallerParty != "" { - conditions = append(conditions, "JSON_EXTRACT(cdr_json, '$.callerParty') = ?") - params = append(params, querys.CallerParty) - } - if querys.CalledParty != "" { - conditions = append(conditions, "JSON_EXTRACT(cdr_json, '$.calledParty') = ?") - params = append(params, querys.CalledParty) - } - if querys.RecordType != "" { - recordTypes := strings.Split(querys.RecordType, ",") - placeholder := repo.KeyPlaceholderByQuery(len(recordTypes)) - conditions = append(conditions, fmt.Sprintf("JSON_EXTRACT(cdr_json, '$.recordType') in (%s)", placeholder)) - for _, recordType := range recordTypes { - params = append(params, recordType) - } - } - - // 构建查询条件语句 - whereSql := "" - if len(conditions) > 0 { - whereSql += " where " + strings.Join(conditions, " and ") - } - - result := map[string]any{ - "total": 0, - "rows": []model.CDREvent{}, - } - - // 查询数量 长度为0直接返回 - totalSql := "select count(1) as 'total' from cdr_event_ims" - totalRows, err := datasource.RawDB("", totalSql+whereSql, params) - if err != nil { - logger.Errorf("total err => %v", err) - return result - } - total := parse.Number(totalRows[0]["total"]) - if total == 0 { - return result - } else { - result["total"] = total - } - - // 分页 - pageNum, pageSize := repo.PageNumSize(querys.PageNum, querys.PageSize) - pageSql := " limit ?,? " - params = append(params, pageNum*pageSize) - params = append(params, pageSize) - - // 排序 - orderSql := "" - if querys.SortField != "" { - sortSql := querys.SortField - if querys.SortOrder != "" { - if querys.SortOrder == "desc" { - sortSql += " desc " - } else { - sortSql += " asc " - } - } - orderSql = fmt.Sprintf(" order by id desc, %s ", sortSql) - } - - // 查询数据 - querySql := r.selectSql + whereSql + orderSql + pageSql - results, err := datasource.RawDB("", querySql, params) - if err != nil { - logger.Errorf("query err => %v", err) - } - - // 转换实体 - result["rows"] = r.convertResultRows(results) - return result -} - -// SelectByIds 通过ID查询 -func (r *CDREventImpl) SelectByIds(cdrIds []string) []model.CDREvent { - placeholder := repo.KeyPlaceholderByQuery(len(cdrIds)) - querySql := r.selectSql + " where id in (" + placeholder + ")" - parameters := repo.ConvertIdsSlice(cdrIds) - results, err := datasource.RawDB("", querySql, parameters) - if err != nil { - logger.Errorf("query err => %v", err) - return []model.CDREvent{} - } - // 转换实体 - return r.convertResultRows(results) -} - -// DeleteByIds 批量删除信息 -func (r *CDREventImpl) DeleteByIds(cdrIds []string) int64 { - placeholder := repo.KeyPlaceholderByQuery(len(cdrIds)) - sql := "delete from cdr_event_ims where id in (" + placeholder + ")" - parameters := repo.ConvertIdsSlice(cdrIds) - results, err := datasource.ExecDB("", sql, parameters) - if err != nil { - logger.Errorf("delete err => %v", err) - return 0 - } - return results -} - -// convertResultRows 将结果记录转实体结果组 -func (r *SMFCDREventImpl) convertResultRows(rows []map[string]any) []model.CDREventSMF { - arr := make([]model.CDREventSMF, 0) - for _, row := range rows { - item := model.CDREventSMF{} - for key, value := range row { - if keyMapper, ok := r.resultMap[key]; ok { - repo.SetFieldValue(&item, keyMapper, value) - } - } - arr = append(arr, item) - } - return arr -} - -// SelectPage 根据条件分页查询 -func (r *SMFCDREventImpl) SelectPage(querys model.SMFCDREventQuery) map[string]any { - // 查询条件拼接 - var conditions []string - var params []any - if querys.NeType != "" { - conditions = append(conditions, "ne_type = ?") - params = append(params, querys.NeType) - } - if querys.RmUID != "" { - conditions = append(conditions, "rm_uid = ?") - params = append(params, querys.RmUID) - } - if querys.StartTime != "" { - conditions = append(conditions, "timestamp >= ?") - beginDate := date.ParseStrToDate(querys.StartTime, date.YYYY_MM_DD_HH_MM_SS) - params = append(params, beginDate.Unix()) - } - if querys.EndTime != "" { - conditions = append(conditions, "timestamp <= ?") - endDate := date.ParseStrToDate(querys.EndTime, date.YYYY_MM_DD_HH_MM_SS) - params = append(params, endDate.Unix()) - } - if querys.RecordType != "" { - conditions = append(conditions, "JSON_EXTRACT(cdr_json, '$.recordType') = ?") - params = append(params, querys.RecordType) - } - if querys.SubscriberID != "" { - conditions = append(conditions, "JSON_EXTRACT(cdr_json, '$.subscriberIdentifier.subscriptionIDData') = ?") - params = append(params, querys.SubscriberID) - } - // if querys.RecordType != "" { - // recordTypes := strings.Split(querys.RecordType, ",") - // placeholder := repo.KeyPlaceholderByQuery(len(recordTypes)) - // conditions = append(conditions, fmt.Sprintf("JSON_EXTRACT(cdr_json, '$.recordType') in (%s)", placeholder)) - // for _, recordType := range recordTypes { - // params = append(params, recordType) - // } - // } - - // 构建查询条件语句 - whereSql := "" - if len(conditions) > 0 { - whereSql += " where " + strings.Join(conditions, " and ") - } - - result := map[string]any{ - "total": 0, - "rows": []model.CDREventSMF{}, - } - - // 查询数量 长度为0直接返回 - totalSql := "select count(1) as 'total' from cdr_event_smf" - totalRows, err := datasource.RawDB("", totalSql+whereSql, params) - if err != nil { - logger.Errorf("total err => %v", err) - return result - } - total := parse.Number(totalRows[0]["total"]) - if total == 0 { - return result - } else { - result["total"] = total - } - - // 分页 - pageNum, pageSize := repo.PageNumSize(querys.PageNum, querys.PageSize) - pageSql := " limit ?,? " - params = append(params, pageNum*pageSize) - params = append(params, pageSize) - - // 排序 - orderSql := "" - if querys.SortField != "" { - sortSql := querys.SortField - if querys.SortOrder != "" { - if querys.SortOrder == "desc" { - sortSql += " desc " - } else { - sortSql += " asc " - } - } - orderSql = fmt.Sprintf(" order by id desc, %s ", sortSql) - } - - // 查询数据 - querySql := r.selectSql + whereSql + orderSql + pageSql - results, err := datasource.RawDB("", querySql, params) - if err != nil { - logger.Errorf("query err => %v", err) - } - - // 转换实体 - result["rows"] = r.convertResultRows(results) - return result -} - -// SelectByIds 通过ID查询 -func (r *SMFCDREventImpl) SelectByIds(cdrIds []string) []model.CDREventSMF { - placeholder := repo.KeyPlaceholderByQuery(len(cdrIds)) - querySql := r.selectSql + " where id in (" + placeholder + ")" - parameters := repo.ConvertIdsSlice(cdrIds) - results, err := datasource.RawDB("", querySql, parameters) - if err != nil { - logger.Errorf("query err => %v", err) - return []model.CDREventSMF{} - } - // 转换实体 - return r.convertResultRows(results) -} - -// DeleteByIds 批量删除信息 -func (r *SMFCDREventImpl) DeleteByIds(cdrIds []string) int64 { - placeholder := repo.KeyPlaceholderByQuery(len(cdrIds)) - sql := "delete from cdr_event_smf where id in (" + placeholder + ")" - parameters := repo.ConvertIdsSlice(cdrIds) - results, err := datasource.ExecDB("", sql, parameters) - if err != nil { - logger.Errorf("delete err => %v", err) - return 0 - } - return results -} diff --git a/src/modules/network_data/repository/cdr_event_ims.go b/src/modules/network_data/repository/cdr_event_ims.go new file mode 100644 index 00000000..fcc9a7bb --- /dev/null +++ b/src/modules/network_data/repository/cdr_event_ims.go @@ -0,0 +1,15 @@ +package repository + +import "be.ems/src/modules/network_data/model" + +// CDR会话事件IMS 数据层接口 +type ICDREventIMS interface { + // SelectPage 根据条件分页查询 + SelectPage(querys model.CDREventIMSQuery) map[string]any + + // SelectByIds 通过ID查询 + SelectByIds(cdrIds []string) []model.CDREventIMS + + // DeleteByIds 批量删除信息 + DeleteByIds(cdrIds []string) int64 +} diff --git a/src/modules/network_data/repository/cdr_event_ims.impl.go b/src/modules/network_data/repository/cdr_event_ims.impl.go new file mode 100644 index 00000000..8ab83dda --- /dev/null +++ b/src/modules/network_data/repository/cdr_event_ims.impl.go @@ -0,0 +1,178 @@ +package repository + +import ( + "fmt" + "strings" + + "be.ems/src/framework/datasource" + "be.ems/src/framework/logger" + "be.ems/src/framework/utils/parse" + "be.ems/src/framework/utils/repo" + "be.ems/src/modules/network_data/model" +) + +// 实例化数据层 CDREventImpl 结构体 +var NewCDREventIMSImpl = &CDREventIMSImpl{ + selectSql: `select id, ne_type, ne_name, rm_uid, timestamp, cdr_json, created_at from cdr_event_ims`, + + resultMap: map[string]string{ + "id": "ID", + "ne_type": "NeType", + "ne_name": "NeName", + "rm_uid": "RmUID", + "timestamp": "Timestamp", + "cdr_json": "CDRJSONStr", + "created_at": "CreatedAt", + }, +} + +// CDREventIMSImpl CDR会话事件IMS 数据层处理 +type CDREventIMSImpl struct { + // 查询视图对象SQL + selectSql string + // 结果字段与实体映射 + resultMap map[string]string +} + +// convertResultRows 将结果记录转实体结果组 +func (r *CDREventIMSImpl) convertResultRows(rows []map[string]any) []model.CDREventIMS { + arr := make([]model.CDREventIMS, 0) + for _, row := range rows { + item := model.CDREventIMS{} + for key, value := range row { + if keyMapper, ok := r.resultMap[key]; ok { + repo.SetFieldValue(&item, keyMapper, value) + } + } + arr = append(arr, item) + } + return arr +} + +// SelectPage 根据条件分页查询 +func (r *CDREventIMSImpl) SelectPage(querys model.CDREventIMSQuery) map[string]any { + // 查询条件拼接 + var conditions []string + var params []any + if querys.NeType != "" { + conditions = append(conditions, "ne_type = ?") + params = append(params, querys.NeType) + } + if querys.RmUID != "" { + conditions = append(conditions, "rm_uid = ?") + params = append(params, querys.RmUID) + } + if querys.StartTime != "" { + conditions = append(conditions, "timestamp >= ?") + if len(querys.StartTime) == 13 { + querys.StartTime = querys.StartTime[:10] + } + params = append(params, querys.StartTime) + } + if querys.EndTime != "" { + conditions = append(conditions, "timestamp <= ?") + if len(querys.EndTime) == 13 { + querys.EndTime = querys.EndTime[:10] + } + params = append(params, querys.EndTime) + } + if querys.CallerParty != "" { + conditions = append(conditions, "JSON_EXTRACT(cdr_json, '$.callerParty') = ?") + params = append(params, querys.CallerParty) + } + if querys.CalledParty != "" { + conditions = append(conditions, "JSON_EXTRACT(cdr_json, '$.calledParty') = ?") + params = append(params, querys.CalledParty) + } + if querys.RecordType != "" { + recordTypes := strings.Split(querys.RecordType, ",") + placeholder := repo.KeyPlaceholderByQuery(len(recordTypes)) + conditions = append(conditions, fmt.Sprintf("JSON_EXTRACT(cdr_json, '$.recordType') in (%s)", placeholder)) + for _, recordType := range recordTypes { + params = append(params, recordType) + } + } + + // 构建查询条件语句 + whereSql := "" + if len(conditions) > 0 { + whereSql += " where " + strings.Join(conditions, " and ") + } + + result := map[string]any{ + "total": 0, + "rows": []model.CDREventIMS{}, + } + + // 查询数量 长度为0直接返回 + totalSql := "select count(1) as 'total' from cdr_event_ims" + totalRows, err := datasource.RawDB("", totalSql+whereSql, params) + if err != nil { + logger.Errorf("total err => %v", err) + return result + } + total := parse.Number(totalRows[0]["total"]) + if total == 0 { + return result + } else { + result["total"] = total + } + + // 分页 + pageNum, pageSize := repo.PageNumSize(querys.PageNum, querys.PageSize) + pageSql := " limit ?,? " + params = append(params, pageNum*pageSize) + params = append(params, pageSize) + + // 排序 + orderSql := "" + if querys.SortField != "" { + sortSql := querys.SortField + if querys.SortOrder != "" { + if querys.SortOrder == "desc" { + sortSql += " desc " + } else { + sortSql += " asc " + } + } + orderSql = fmt.Sprintf(" order by id desc, %s ", sortSql) + } + + // 查询数据 + querySql := r.selectSql + whereSql + orderSql + pageSql + results, err := datasource.RawDB("", querySql, params) + if err != nil { + logger.Errorf("query err => %v", err) + } + + // 转换实体 + result["rows"] = r.convertResultRows(results) + return result +} + +// SelectByIds 通过ID查询 +func (r *CDREventIMSImpl) SelectByIds(cdrIds []string) []model.CDREventIMS { + placeholder := repo.KeyPlaceholderByQuery(len(cdrIds)) + querySql := r.selectSql + " where id in (" + placeholder + ")" + parameters := repo.ConvertIdsSlice(cdrIds) + results, err := datasource.RawDB("", querySql, parameters) + if err != nil { + logger.Errorf("query err => %v", err) + return []model.CDREventIMS{} + } + // 转换实体 + return r.convertResultRows(results) +} + +// DeleteByIds 批量删除信息 +func (r *CDREventIMSImpl) DeleteByIds(cdrIds []string) int64 { + placeholder := repo.KeyPlaceholderByQuery(len(cdrIds)) + sql := "delete from cdr_event_ims where id in (" + placeholder + ")" + parameters := repo.ConvertIdsSlice(cdrIds) + results, err := datasource.ExecDB("", sql, parameters) + if err != nil { + logger.Errorf("delete err => %v", err) + return 0 + } + return results +} diff --git a/src/modules/network_data/repository/cdr_event_smf.go b/src/modules/network_data/repository/cdr_event_smf.go new file mode 100644 index 00000000..1a950a29 --- /dev/null +++ b/src/modules/network_data/repository/cdr_event_smf.go @@ -0,0 +1,15 @@ +package repository + +import "be.ems/src/modules/network_data/model" + +// CDR会话事件SMF 数据层接口 +type ICDREventSMF interface { + // SelectPage 根据条件分页查询 + SelectPage(querys model.CDREventSMFQuery) map[string]any + + // SelectByIds 通过ID查询 + SelectByIds(cdrIds []string) []model.CDREventSMF + + // DeleteByIds 批量删除信息 + DeleteByIds(cdrIds []string) int64 +} diff --git a/src/modules/network_data/repository/cdr_event_smf.impl.go b/src/modules/network_data/repository/cdr_event_smf.impl.go new file mode 100644 index 00000000..818f1f25 --- /dev/null +++ b/src/modules/network_data/repository/cdr_event_smf.impl.go @@ -0,0 +1,185 @@ +package repository + +import ( + "fmt" + "strings" + + "be.ems/src/framework/datasource" + "be.ems/src/framework/logger" + "be.ems/src/framework/utils/parse" + "be.ems/src/framework/utils/repo" + "be.ems/src/modules/network_data/model" +) + +// 实例化数据层 CDREventSMFImpl 结构体 +var NewCDREventSMFImpl = &CDREventSMFImpl{ + selectSql: `select id, ne_type, ne_name, rm_uid, timestamp, cdr_json, created_at from cdr_event_smf`, + // selectSql: `select id, ne_type, ne_name, rm_uid, timestamp, JSON_EXTRACT(cdr_json, '$.recordType') AS record_type, JSON_EXTRACT(cdr_json, '$.chargingID') AS charging_id, JSON_EXTRACT(cdr_json, '$.subscriberIdentifier.subscriptionIDData') AS subscriber_id, JSON_EXTRACT(cdr_json, '$.duration') AS duration, JSON_EXTRACT(cdr_json, '$.listOfMultipleUnitUsage[*].usedUnitContainer[*].dataVolumeUplink') AS data_volume_uplink, JSON_EXTRACT(cdr_json, '$.listOfMultipleUnitUsage[*].usedUnitContainer[*].dataVolumeDownlink') AS data_volume_downlink, JSON_EXTRACT(cdr_json, '$.listOfMultipleUnitUsage[*].usedUnitContainer[*].dataTotalVolume') AS data_total_volume, JSON_EXTRACT(cdr_json, '$.pDUSessionChargingInformation.pDUAddress') AS pdu_address, created_at from cdr_event_smf`, + + resultMap: map[string]string{ + "id": "ID", + "ne_type": "NeType", + "ne_name": "NeName", + "rm_uid": "RmUID", + "timestamp": "Timestamp", + "cdr_json": "CDRJSONStr", + "created_at": "CreatedAt", + // "id": "ID", + // "ne_type": "NeType", + // "ne_name": "NeName", + // "rm_uid": "RmUID", + // "timestamp": "Timestamp", + // "record_type": "RecordType", + // "charging_id": "ChargingID", + // "subscriber_id": "SubscriberID", + // "duration": "Duration", + // "data_volume_uplink": "DataVolumeUplink", + // "data_volume_downlink": "DataVolumeDownlink", + // "data_total_volume": "DataTotalVolume", + // "pdu_address": "PDUAddress", + // "created_at": "CreatedAt", + }, +} + +// CDREventSMFImpl CDR会话事件 数据层处理 +type CDREventSMFImpl struct { + // 查询视图对象SQL + selectSql string + // 结果字段与实体映射 + resultMap map[string]string +} + +// convertResultRows 将结果记录转实体结果组 +func (r *CDREventSMFImpl) convertResultRows(rows []map[string]any) []model.CDREventSMF { + arr := make([]model.CDREventSMF, 0) + for _, row := range rows { + item := model.CDREventSMF{} + for key, value := range row { + if keyMapper, ok := r.resultMap[key]; ok { + repo.SetFieldValue(&item, keyMapper, value) + } + } + arr = append(arr, item) + } + return arr +} + +// SelectPage 根据条件分页查询 +func (r *CDREventSMFImpl) SelectPage(querys model.CDREventSMFQuery) map[string]any { + // 查询条件拼接 + var conditions []string + var params []any + if querys.NeType != "" { + conditions = append(conditions, "ne_type = ?") + params = append(params, querys.NeType) + } + if querys.RmUID != "" { + conditions = append(conditions, "rm_uid = ?") + params = append(params, querys.RmUID) + } + if querys.StartTime != "" { + conditions = append(conditions, "timestamp >= ?") + if len(querys.StartTime) == 13 { + querys.StartTime = querys.StartTime[:10] + } + params = append(params, querys.StartTime) + } + if querys.EndTime != "" { + conditions = append(conditions, "timestamp <= ?") + if len(querys.EndTime) == 13 { + querys.EndTime = querys.EndTime[:10] + } + params = append(params, querys.EndTime) + } + if querys.RecordType != "" { + conditions = append(conditions, "JSON_EXTRACT(cdr_json, '$.recordType') = ?") + params = append(params, querys.RecordType) + } + if querys.SubscriberID != "" { + conditions = append(conditions, "JSON_EXTRACT(cdr_json, '$.subscriberIdentifier.subscriptionIDData') = ?") + params = append(params, querys.SubscriberID) + } + + // 构建查询条件语句 + whereSql := "" + if len(conditions) > 0 { + whereSql += " where " + strings.Join(conditions, " and ") + } + + result := map[string]any{ + "total": 0, + "rows": []model.CDREventSMF{}, + } + + // 查询数量 长度为0直接返回 + totalSql := "select count(1) as 'total' from cdr_event_smf" + totalRows, err := datasource.RawDB("", totalSql+whereSql, params) + if err != nil { + logger.Errorf("total err => %v", err) + return result + } + total := parse.Number(totalRows[0]["total"]) + if total == 0 { + return result + } else { + result["total"] = total + } + + // 分页 + pageNum, pageSize := repo.PageNumSize(querys.PageNum, querys.PageSize) + pageSql := " limit ?,? " + params = append(params, pageNum*pageSize) + params = append(params, pageSize) + + // 排序 + orderSql := "" + if querys.SortField != "" { + sortSql := querys.SortField + if querys.SortOrder != "" { + if querys.SortOrder == "desc" { + sortSql += " desc " + } else { + sortSql += " asc " + } + } + orderSql = fmt.Sprintf(" order by id desc, %s ", sortSql) + } + + // 查询数据 + querySql := r.selectSql + whereSql + orderSql + pageSql + results, err := datasource.RawDB("", querySql, params) + if err != nil { + logger.Errorf("query err => %v", err) + } + + // 转换实体 + result["rows"] = r.convertResultRows(results) + return result +} + +// SelectByIds 通过ID查询 +func (r *CDREventSMFImpl) SelectByIds(cdrIds []string) []model.CDREventSMF { + placeholder := repo.KeyPlaceholderByQuery(len(cdrIds)) + querySql := r.selectSql + " where id in (" + placeholder + ")" + parameters := repo.ConvertIdsSlice(cdrIds) + results, err := datasource.RawDB("", querySql, parameters) + if err != nil { + logger.Errorf("query err => %v", err) + return []model.CDREventSMF{} + } + // 转换实体 + return r.convertResultRows(results) +} + +// DeleteByIds 批量删除信息 +func (r *CDREventSMFImpl) DeleteByIds(cdrIds []string) int64 { + placeholder := repo.KeyPlaceholderByQuery(len(cdrIds)) + sql := "delete from cdr_event_smf where id in (" + placeholder + ")" + parameters := repo.ConvertIdsSlice(cdrIds) + results, err := datasource.ExecDB("", sql, parameters) + if err != nil { + logger.Errorf("delete err => %v", err) + return 0 + } + return results +} diff --git a/src/modules/network_data/repository/perf_kpi.impl.go b/src/modules/network_data/repository/perf_kpi.impl.go index 20e8ae27..29fdcdfb 100644 --- a/src/modules/network_data/repository/perf_kpi.impl.go +++ b/src/modules/network_data/repository/perf_kpi.impl.go @@ -96,19 +96,47 @@ func (r *PerfKPIImpl) SelectKpiReport(query model.GoldKPIQuery, kpiIds []string) params = append(params, query.RmUID) } if query.NeType != "" { - conditions = append(conditions, "gk.ne_type = ?") - params = append(params, query.NeType) + //conditions = append(conditions, "gk.ne_type = ?") + // params = append(params, query.NeType) tableName += strings.ToLower(query.NeType) } - var dateTimeStr string = "CONCAT(gk.`date`, \" \", gk.start_time)" + + var dateStr1, dateStr2, timeStr1, timeStr2 string if query.StartTime != "" { - conditions = append(conditions, dateTimeStr+" >= ?") - params = append(params, query.StartTime) + dateStr1 = query.StartTime[:10] + timeStr1 = query.StartTime[11:] } if query.EndTime != "" { - conditions = append(conditions, dateTimeStr+" <= ?") - params = append(params, query.EndTime) + dateStr2 = query.EndTime[:10] + timeStr2 = query.EndTime[11:] } + if dateStr1 == dateStr2 && dateStr1 != "" { + conditions = append(conditions, "gk.`date` = ?") + params = append(params, dateStr1) + conditions = append(conditions, "gk.`start_time` >= ?") + params = append(params, timeStr1) + conditions = append(conditions, "gk.`start_time` <= ?") + params = append(params, timeStr2) + } else { + if dateStr1 != "" { + conditions = append(conditions, "(gk.`date` > ? OR (gk.`date` = ? AND gk.`start_time` >= ?))") + params = append(params, dateStr1, dateStr1, timeStr1) + } + if dateStr2 != "" { + conditions = append(conditions, "(gk.`date` < ? OR (gk.`date` = ? AND gk.`start_time` <= ?))") + params = append(params, dateStr2, dateStr2, timeStr2) + } + } + + // var dateTimeStr string = "CONCAT(gk.`date`, \" \", gk.start_time)" + // if query.StartTime != "" { + // conditions = append(conditions, dateTimeStr+" >= ?") + // params = append(params, query.StartTime) + // } + // if query.EndTime != "" { + // conditions = append(conditions, dateTimeStr+" <= ?") + // params = append(params, query.EndTime) + // } // 构建查询条件语句 whereSql := "" if len(conditions) > 0 { @@ -116,6 +144,7 @@ func (r *PerfKPIImpl) SelectKpiReport(query model.GoldKPIQuery, kpiIds []string) } // 查询字段列 + var dateTimeStr string = "CONCAT(gk.`date`, \" \", gk.start_time)" timeFormat := "DATE_FORMAT(" + dateTimeStr + ", '%Y-%m-%d %H:%i:')" secondGroup := fmt.Sprintf("LPAD(FLOOR(SECOND(gk.start_time) / %d) * %d, 2, '0')", query.Interval, query.Interval) groupByField := fmt.Sprintf("CONCAT( %s, %s ) AS timeGroup", timeFormat, secondGroup) diff --git a/src/modules/network_data/repository/udm_auth.go b/src/modules/network_data/repository/udm_auth.go new file mode 100644 index 00000000..90a3bea8 --- /dev/null +++ b/src/modules/network_data/repository/udm_auth.go @@ -0,0 +1,26 @@ +package repository + +import ( + "be.ems/src/modules/network_data/model" +) + +// UDM鉴权信息 数据层接口 +type IUDMAuth interface { + // ClearAndInsert 清空ne_id后新增实体 + ClearAndInsert(neId string, uArr []model.UDMAuth) int64 + + // SelectPage 根据条件分页查询 + SelectPage(query map[string]any) map[string]any + + // SelectList 根据实体查询 + SelectList(u model.UDMAuth) []model.UDMAuth + + // Insert 批量添加 + Inserts(uArr []model.UDMAuth) int64 + + // Delete 删除实体 + Delete(neId, imsi string) int64 + + // DeletePrefixByIMSI 删除前缀匹配的实体 + DeletePrefixByIMSI(neId, imsi string) int64 +} diff --git a/src/modules/network_element/repository/udm_auth.impl.go b/src/modules/network_data/repository/udm_auth.impl.go similarity index 80% rename from src/modules/network_element/repository/udm_auth.impl.go rename to src/modules/network_data/repository/udm_auth.impl.go index 682ab8c5..5fee2f0d 100644 --- a/src/modules/network_element/repository/udm_auth.impl.go +++ b/src/modules/network_data/repository/udm_auth.impl.go @@ -1,13 +1,14 @@ package repository import ( + "fmt" "strings" "be.ems/src/framework/datasource" "be.ems/src/framework/logger" "be.ems/src/framework/utils/parse" "be.ems/src/framework/utils/repo" - "be.ems/src/modules/network_element/model" + "be.ems/src/modules/network_data/model" ) // 实例化数据层 UDMAuthImpl 结构体 @@ -16,13 +17,13 @@ var NewUDMAuthImpl = &UDMAuthImpl{ resultMap: map[string]string{ "id": "ID", - "imsi": "Imsi", + "imsi": "IMSI", "amf": "Amf", "status": "Status", "ki": "Ki", "algo_index": "AlgoIndex", "opc": "Opc", - "ne_id": "NeID", + "ne_id": "NeId", }, } @@ -50,14 +51,13 @@ func (r *UDMAuthImpl) convertResultRows(rows []map[string]any) []model.UDMAuth { } // ClearAndInsert 清空ne_id后新增实体 -func (r *UDMAuthImpl) ClearAndInsert(neID string, authArr []model.UDMAuth) int64 { - // 清空指定ne_id +func (r *UDMAuthImpl) ClearAndInsert(neId string, uArr []model.UDMAuth) int64 { + // 不指定neID时,用 TRUNCATE 清空表快 _, err := datasource.ExecDB("", "TRUNCATE TABLE u_auth_user", nil) if err != nil { logger.Errorf("TRUNCATE err => %v", err) } - - return r.Inserts(authArr) + return r.Inserts(uArr) } // SelectPage 根据条件分页查询 @@ -106,11 +106,9 @@ func (r *UDMAuthImpl) SelectPage(query map[string]any) map[string]any { params = append(params, pageSize) // 排序 - sortSql := "" + orderSql := "" if v, ok := query["sortField"]; ok && v != "" { - if v == "imsi" { - sortSql += " order by imsi " - } + sortSql := v.(string) if o, ok := query["sortOrder"]; ok && o != nil && v != "" { if o == "desc" { sortSql += " desc " @@ -118,10 +116,11 @@ func (r *UDMAuthImpl) SelectPage(query map[string]any) map[string]any { sortSql += " asc " } } + orderSql = fmt.Sprintf(" order by %s ", sortSql) } // 查询数据 - querySql := r.selectSql + whereSql + sortSql + pageSql + querySql := r.selectSql + whereSql + orderSql + pageSql results, err := datasource.RawDB("", querySql, params) if err != nil { logger.Errorf("query err => %v", err) @@ -133,17 +132,17 @@ func (r *UDMAuthImpl) SelectPage(query map[string]any) map[string]any { } // SelectList 根据实体查询 -func (r *UDMAuthImpl) SelectList(auth model.UDMAuth) []model.UDMAuth { +func (r *UDMAuthImpl) SelectList(u model.UDMAuth) []model.UDMAuth { // 查询条件拼接 var conditions []string var params []any - if auth.Imsi != "" { + if u.IMSI != "" { conditions = append(conditions, "imsi = ?") - params = append(params, auth.Imsi) + params = append(params, u.IMSI) } - if auth.NeID != "" { + if u.NeId != "" { conditions = append(conditions, "ne_id = ?") - params = append(params, auth.NeID) + params = append(params, u.NeId) } // 构建查询条件语句 @@ -164,8 +163,8 @@ func (r *UDMAuthImpl) SelectList(auth model.UDMAuth) []model.UDMAuth { } // Insert 批量添加 -func (r *UDMAuthImpl) Inserts(authUsers []model.UDMAuth) int64 { - tx := datasource.DefaultDB().CreateInBatches(authUsers, 3000) +func (r *UDMAuthImpl) Inserts(uArr []model.UDMAuth) int64 { + tx := datasource.DefaultDB().CreateInBatches(uArr, 3000) if err := tx.Error; err != nil { logger.Errorf("CreateInBatches err => %v", err) } @@ -173,19 +172,19 @@ func (r *UDMAuthImpl) Inserts(authUsers []model.UDMAuth) int64 { } // Delete 删除实体 -func (r *UDMAuthImpl) Delete(neID, imsi string) int64 { - tx := datasource.DefaultDB().Where("imsi = ? and ne_id = ?", imsi, neID).Delete(&model.UDMAuth{}) +func (r *UDMAuthImpl) Delete(neId, imsi string) int64 { + tx := datasource.DefaultDB().Where("imsi = ? and ne_id = ?", imsi, neId).Delete(&model.UDMAuth{}) if err := tx.Error; err != nil { logger.Errorf("Delete err => %v", err) } return tx.RowsAffected } -// DeletePrefixImsi 删除前缀匹配的实体 -func (r *UDMAuthImpl) DeletePrefixImsi(neID, imsi string) int64 { - tx := datasource.DefaultDB().Where("imsi like concat(?, '%') and ne_id = ?", imsi, neID).Delete(&model.UDMAuth{}) +// DeletePrefixByIMSI 删除前缀匹配的实体 +func (r *UDMAuthImpl) DeletePrefixByIMSI(neId, imsi string) int64 { + tx := datasource.DefaultDB().Where("imsi like concat(?, '%') and ne_id = ?", imsi, neId).Delete(&model.UDMAuth{}) if err := tx.Error; err != nil { - logger.Errorf("DeletePrefixImsi err => %v", err) + logger.Errorf("DeletePrefixByIMSI err => %v", err) } return tx.RowsAffected } diff --git a/src/modules/network_data/repository/udm_sub.go b/src/modules/network_data/repository/udm_sub.go new file mode 100644 index 00000000..db8db0f8 --- /dev/null +++ b/src/modules/network_data/repository/udm_sub.go @@ -0,0 +1,26 @@ +package repository + +import ( + "be.ems/src/modules/network_data/model" +) + +// UDM签约信息 数据层接口 +type IUDMSub interface { + // ClearAndInsert 清空ne_id后新增实体 + ClearAndInsert(neId string, uArr []model.UDMSub) int64 + + // SelectPage 根据条件分页查询 + SelectPage(query map[string]any) map[string]any + + // SelectList 根据实体查询 + SelectList(u model.UDMSub) []model.UDMSub + + // Insert 批量添加 + Inserts(uArr []model.UDMSub) int64 + + // Delete 删除实体 + Delete(neId, imsi string) int64 + + // DeletePrefixByIMSI 删除前缀匹配的实体 + DeletePrefixByIMSI(neId, imsi string) int64 +} diff --git a/src/modules/network_element/repository/udm_sub.impl.go b/src/modules/network_data/repository/udm_sub.impl.go similarity index 65% rename from src/modules/network_element/repository/udm_sub.impl.go rename to src/modules/network_data/repository/udm_sub.impl.go index 94818908..8792bac0 100644 --- a/src/modules/network_element/repository/udm_sub.impl.go +++ b/src/modules/network_data/repository/udm_sub.impl.go @@ -1,7 +1,7 @@ package repository import ( - "strconv" + "fmt" "strings" dborm "be.ems/lib/core/datasource" @@ -10,7 +10,7 @@ import ( "be.ems/src/framework/logger" "be.ems/src/framework/utils/parse" "be.ems/src/framework/utils/repo" - "be.ems/src/modules/network_element/model" + "be.ems/src/modules/network_data/model" ) // 实例化数据层 UDMSubImpl 结构体 @@ -25,7 +25,7 @@ var NewUDMSubImpl = &UDMSubImpl{ resultMap: map[string]string{ "id": "ID", "msisdn": "Msisdn", - "imsi": "Imsi", + "imsi": "IMSI", "ambr": "Ambr", "nssai": "Nssai", "rat": "Rat", @@ -35,7 +35,7 @@ var NewUDMSubImpl = &UDMSubImpl{ "sm_data": "SmData", "smf_sel": "SmfSel", "eps_dat": "EpsDat", - "ne_id": "NeID", + "ne_id": "NeId", "eps_flag": "EpsFlag", "eps_odb": "EpsOdb", "hplmn_odb": "HplmnOdb", @@ -73,14 +73,14 @@ func (r *UDMSubImpl) convertResultRows(rows []map[string]any) []model.UDMSub { } // ClearAndInsert 清空ne_id后新增实体 -func (r *UDMSubImpl) ClearAndInsert(neID string, subArr []model.UDMSub) int64 { - // 清空指定ne_id +func (r *UDMSubImpl) ClearAndInsert(neID string, u []model.UDMSub) int64 { + // 不指定neID时,用 TRUNCATE 清空表快 _, err := datasource.ExecDB("", "TRUNCATE TABLE u_sub_user", nil) if err != nil { logger.Errorf("TRUNCATE err => %v", err) } - return r.Inserts(subArr) + return r.Inserts(u) } // SelectPage 根据条件分页查询字典类型 @@ -163,14 +163,9 @@ func (r *UDMSubImpl) SelectPage(query map[string]any) map[string]any { params = append(params, pageSize) // 排序 - sortSql := "" + orderSql := "" if v, ok := query["sortField"]; ok && v != "" { - if v == "imsi" { - sortSql += " order by imsi " - } - if v == "msisdn" { - sortSql += " order by msisdn " - } + sortSql := v.(string) if o, ok := query["sortOrder"]; ok && o != nil && v != "" { if o == "desc" { sortSql += " desc " @@ -178,10 +173,11 @@ func (r *UDMSubImpl) SelectPage(query map[string]any) map[string]any { sortSql += " asc " } } + orderSql = fmt.Sprintf(" order by %s ", sortSql) } // 查询数据 - querySql := r.selectSql + whereSql + sortSql + pageSql + querySql := r.selectSql + whereSql + orderSql + pageSql results, err := datasource.RawDB("", querySql, params) if err != nil { logger.Errorf("query err => %v", err) @@ -194,17 +190,17 @@ func (r *UDMSubImpl) SelectPage(query map[string]any) map[string]any { } // SelectList 根据实体查询 -func (r *UDMSubImpl) SelectList(subUser model.UDMSub) []model.UDMSub { +func (r *UDMSubImpl) SelectList(u model.UDMSub) []model.UDMSub { // 查询条件拼接 var conditions []string var params []any - if subUser.Imsi != "" { + if u.IMSI != "" { conditions = append(conditions, "imsi = ?") - params = append(params, subUser.Imsi) + params = append(params, u.IMSI) } - if subUser.NeID != "" { + if u.NeId != "" { conditions = append(conditions, "ne_id = ?") - params = append(params, subUser.NeID) + params = append(params, u.NeId) } // 构建查询条件语句 @@ -224,132 +220,29 @@ func (r *UDMSubImpl) SelectList(subUser model.UDMSub) []model.UDMSub { return r.convertResultRows(results) } -// Insert 新增实体 -func (r *UDMSubImpl) Insert(subUser model.UDMSub) string { - // multi-tenancy - subUserSlice := []model.UDMSub{subUser} - r.SetTenantID(&subUserSlice) - err := datasource.DefaultDB().Create(&subUser).Error - if err != nil { - logger.Errorf("Create err => %v", err) - } - return subUser.ID -} - // Insert 批量添加 -func (r *UDMSubImpl) Inserts(subUser []model.UDMSub) int64 { - // multi-tenancy - r.SetTenantID(&subUser) - - tx := datasource.DefaultDB().CreateInBatches(subUser, 10) +func (r *UDMSubImpl) Inserts(uArr []model.UDMSub) int64 { + tx := datasource.DefaultDB().CreateInBatches(uArr, 2000) if err := tx.Error; err != nil { logger.Errorf("CreateInBatches err => %v", err) } return tx.RowsAffected } -// Update 修改更新 -func (r *UDMSubImpl) Update(neID string, subUser model.UDMSub) int64 { - // 查询先 - var user model.UDMSub - err := datasource.DefaultDB().Where("imsi = ? and ne_id = ?", subUser.Imsi, neID).First(&user).Error - if err != nil { - logger.Errorf("Update First err => %v", err) - } - - if user.Msisdn != subUser.Msisdn { - user.Msisdn = subUser.Msisdn - } - if user.Ambr != subUser.Ambr { - user.Ambr = subUser.Ambr - } - if user.Arfb != subUser.Arfb { - user.Arfb = subUser.Arfb - } - if user.Sar != subUser.Sar { - user.Sar = subUser.Sar - } - if user.Rat != subUser.Rat { - user.Rat = subUser.Rat - } - if user.Cn != subUser.Cn { - user.Cn = subUser.Cn - } - if user.SmfSel != subUser.SmfSel { - user.SmfSel = subUser.SmfSel - } - if user.SmData != subUser.SmData { - user.SmData = subUser.SmData - } - if user.EpsDat != subUser.EpsDat { - user.EpsDat = subUser.EpsDat - } - if user.EpsFlag != subUser.EpsFlag { - user.EpsFlag = subUser.EpsFlag - } - if user.EpsDat != subUser.EpsDat { - user.EpsOdb = subUser.EpsOdb - } - if user.HplmnOdb != subUser.HplmnOdb { - user.HplmnOdb = subUser.HplmnOdb - } - if user.Epstpl != subUser.Epstpl { - user.Epstpl = subUser.Epstpl - } - if user.Ard != subUser.Ard { - user.Ard = subUser.Ard - } - if user.ContextId != subUser.ContextId { - user.ContextId = subUser.ContextId - } - if user.ApnContext != subUser.ApnContext { - user.ApnContext = subUser.ApnContext - } - if user.StaticIp != subUser.StaticIp { - user.StaticIp = subUser.StaticIp - } - - tx := datasource.DefaultDB().Save(user) - if err := tx.Error; err != nil { - logger.Errorf("Update Save err => %v", err) - return 0 - } - return tx.RowsAffected -} - // Delete 删除实体 -func (r *UDMSubImpl) Delete(neID, imsi string) int64 { - tx := datasource.DefaultDB().Where("imsi = ? and ne_id = ?", imsi, neID).Delete(&model.UDMSub{}) +func (r *UDMSubImpl) Delete(neId, imsi string) int64 { + tx := datasource.DefaultDB().Where("imsi = ? and ne_id = ?", imsi, neId).Delete(&model.UDMSub{}) if err := tx.Error; err != nil { logger.Errorf("Delete err => %v", err) } return tx.RowsAffected } -// DeletePrefixImsi 删除前缀匹配的实体 -func (r *UDMSubImpl) DeletePrefixImsi(neID, imsi string) int64 { - tx := datasource.DefaultDB().Where("imsi like concat(?, '%') and ne_id = ?", imsi, neID).Delete(&model.UDMSub{}) +// DeletePrefixByIMSI 删除前缀匹配的实体 +func (r *UDMSubImpl) DeletePrefixByIMSI(neId, imsi string) int64 { + tx := datasource.DefaultDB().Where("imsi like concat(?, '%') and ne_id = ?", imsi, neId).Delete(&model.UDMSub{}) if err := tx.Error; err != nil { - logger.Errorf("DeletePrefixImsi err => %v", err) - } - return tx.RowsAffected -} - -// Delete 删除范围实体 -func (r *UDMSubImpl) Deletes(neID, imsi, num string) int64 { - imsiV, err := strconv.Atoi(imsi) - if err != nil { - return 0 - } - - numV, err := strconv.Atoi(num) - if err != nil { - return 0 - } - - tx := datasource.DefaultDB().Where("imsi >= ? and imsi < ? and ne_id = ?", imsiV, imsiV+numV, neID).Delete(&model.UDMSub{}) - if err := tx.Error; err != nil { - logger.Errorf("Deletes err => %v", err) + logger.Errorf("DeletePrefixByIMSI err => %v", err) } return tx.RowsAffected } diff --git a/src/modules/network_data/repository/ue_event.go b/src/modules/network_data/repository/ue_event_amf.go similarity index 55% rename from src/modules/network_data/repository/ue_event.go rename to src/modules/network_data/repository/ue_event_amf.go index 58b90462..4e053a01 100644 --- a/src/modules/network_data/repository/ue_event.go +++ b/src/modules/network_data/repository/ue_event_amf.go @@ -2,13 +2,13 @@ package repository import "be.ems/src/modules/network_data/model" -// UE会话事件 数据层接口 -type IUEEvent interface { +// UE会话事件AMF 数据层接口 +type IUEEventAMF interface { // SelectPage 根据条件分页查询 - SelectPage(querys model.UEEventQuery) map[string]any + SelectPage(querys model.UEEventAMFQuery) map[string]any // SelectByIds 通过ID查询 - SelectByIds(ueIds []string) []model.UEEvent + SelectByIds(ueIds []string) []model.UEEventAMF // DeleteByIds 批量删除信息 DeleteByIds(ueIds []string) int64 diff --git a/src/modules/network_data/repository/ue_event.impl.go b/src/modules/network_data/repository/ue_event_amf.impl.go similarity index 78% rename from src/modules/network_data/repository/ue_event.impl.go rename to src/modules/network_data/repository/ue_event_amf.impl.go index 8046ffc7..b442207c 100644 --- a/src/modules/network_data/repository/ue_event.impl.go +++ b/src/modules/network_data/repository/ue_event_amf.impl.go @@ -6,15 +6,14 @@ import ( "be.ems/src/framework/datasource" "be.ems/src/framework/logger" - "be.ems/src/framework/utils/date" "be.ems/src/framework/utils/parse" "be.ems/src/framework/utils/repo" "be.ems/src/modules/network_data/model" ) -// 实例化数据层 UEEventImpl 结构体 -var NewUEEventImpl = &UEEventImpl{ - selectSql: `select id, ne_type, ne_name, rm_uid, timestamp, event_type, event_json, created_at from ue_event`, +// 实例化数据层 UEEventAMFImpl 结构体 +var NewUEEventAMFImpl = &UEEventAMFImpl{ + selectSql: `select id, ne_type, ne_name, rm_uid, timestamp, event_type, event_json, created_at from ue_event_amf`, resultMap: map[string]string{ "id": "ID", @@ -28,8 +27,8 @@ var NewUEEventImpl = &UEEventImpl{ }, } -// UEEventImpl UE会话事件 数据层处理 -type UEEventImpl struct { +// UEEventAMFImpl UE会话事件 数据层处理 +type UEEventAMFImpl struct { // 查询视图对象SQL selectSql string // 结果字段与实体映射 @@ -37,10 +36,10 @@ type UEEventImpl struct { } // convertResultRows 将结果记录转实体结果组 -func (r *UEEventImpl) convertResultRows(rows []map[string]any) []model.UEEvent { - arr := make([]model.UEEvent, 0) +func (r *UEEventAMFImpl) convertResultRows(rows []map[string]any) []model.UEEventAMF { + arr := make([]model.UEEventAMF, 0) for _, row := range rows { - item := model.UEEvent{} + item := model.UEEventAMF{} for key, value := range row { if keyMapper, ok := r.resultMap[key]; ok { repo.SetFieldValue(&item, keyMapper, value) @@ -52,7 +51,7 @@ func (r *UEEventImpl) convertResultRows(rows []map[string]any) []model.UEEvent { } // SelectPage 根据条件分页查询 -func (r *UEEventImpl) SelectPage(querys model.UEEventQuery) map[string]any { +func (r *UEEventAMFImpl) SelectPage(querys model.UEEventAMFQuery) map[string]any { // 查询条件拼接 var conditions []string var params []any @@ -66,17 +65,17 @@ func (r *UEEventImpl) SelectPage(querys model.UEEventQuery) map[string]any { } if querys.StartTime != "" { conditions = append(conditions, "timestamp >= ?") - beginDate := date.ParseStrToDate(querys.StartTime, date.YYYY_MM_DD_HH_MM_SS) - params = append(params, beginDate.Unix()) + if len(querys.StartTime) == 13 { + querys.StartTime = querys.StartTime[:10] + } + params = append(params, querys.StartTime) } if querys.EndTime != "" { conditions = append(conditions, "timestamp <= ?") - endDate := date.ParseStrToDate(querys.EndTime, date.YYYY_MM_DD_HH_MM_SS) - params = append(params, endDate.Unix()) - } - if querys.IMSI != "" { - conditions = append(conditions, "JSON_EXTRACT(event_json, '$.imsi') = ?") - params = append(params, querys.IMSI) + if len(querys.EndTime) == 13 { + querys.EndTime = querys.EndTime[:10] + } + params = append(params, querys.EndTime) } if querys.EventType != "" { eventTypes := strings.Split(querys.EventType, ",") @@ -86,6 +85,10 @@ func (r *UEEventImpl) SelectPage(querys model.UEEventQuery) map[string]any { params = append(params, eventType) } } + if querys.IMSI != "" { + conditions = append(conditions, "JSON_EXTRACT(event_json, '$.imsi') = ?") + params = append(params, querys.IMSI) + } // 构建查询条件语句 whereSql := "" @@ -95,11 +98,11 @@ func (r *UEEventImpl) SelectPage(querys model.UEEventQuery) map[string]any { result := map[string]any{ "total": 0, - "rows": []model.CDREvent{}, + "rows": []model.UEEventAMF{}, } // 查询数量 长度为0直接返回 - totalSql := "select count(1) as 'total' from ue_event" + totalSql := "select count(1) as 'total' from ue_event_amf" totalRows, err := datasource.RawDB("", totalSql+whereSql, params) if err != nil { logger.Errorf("total err => %v", err) @@ -145,23 +148,23 @@ func (r *UEEventImpl) SelectPage(querys model.UEEventQuery) map[string]any { } // SelectByIds 通过ID查询 -func (r *UEEventImpl) SelectByIds(ueIds []string) []model.UEEvent { +func (r *UEEventAMFImpl) SelectByIds(ueIds []string) []model.UEEventAMF { placeholder := repo.KeyPlaceholderByQuery(len(ueIds)) querySql := r.selectSql + " where id in (" + placeholder + ")" parameters := repo.ConvertIdsSlice(ueIds) results, err := datasource.RawDB("", querySql, parameters) if err != nil { logger.Errorf("query err => %v", err) - return []model.UEEvent{} + return []model.UEEventAMF{} } // 转换实体 return r.convertResultRows(results) } // DeleteByIds 批量删除信息 -func (r *UEEventImpl) DeleteByIds(ueIds []string) int64 { +func (r *UEEventAMFImpl) DeleteByIds(ueIds []string) int64 { placeholder := repo.KeyPlaceholderByQuery(len(ueIds)) - sql := "delete from ue_event where id in (" + placeholder + ")" + sql := "delete from ue_event_amf where id in (" + placeholder + ")" parameters := repo.ConvertIdsSlice(ueIds) results, err := datasource.ExecDB("", sql, parameters) if err != nil { diff --git a/src/modules/network_data/repository/ue_event_mme.go b/src/modules/network_data/repository/ue_event_mme.go new file mode 100644 index 00000000..7a77fb18 --- /dev/null +++ b/src/modules/network_data/repository/ue_event_mme.go @@ -0,0 +1,15 @@ +package repository + +import "be.ems/src/modules/network_data/model" + +// UE会话事件MME 数据层接口 +type IUEEventMME interface { + // SelectPage 根据条件分页查询 + SelectPage(querys model.UEEventMMEQuery) map[string]any + + // SelectByIds 通过ID查询 + SelectByIds(ueIds []string) []model.UEEventMME + + // DeleteByIds 批量删除信息 + DeleteByIds(ueIds []string) int64 +} diff --git a/src/modules/network_data/repository/ue_event_mme.impl.go b/src/modules/network_data/repository/ue_event_mme.impl.go new file mode 100644 index 00000000..180bc9df --- /dev/null +++ b/src/modules/network_data/repository/ue_event_mme.impl.go @@ -0,0 +1,175 @@ +package repository + +import ( + "fmt" + "strings" + + "be.ems/src/framework/datasource" + "be.ems/src/framework/logger" + "be.ems/src/framework/utils/parse" + "be.ems/src/framework/utils/repo" + "be.ems/src/modules/network_data/model" +) + +// 实例化数据层 UEEventMMEImpl 结构体 +var NewUEEventMMEImpl = &UEEventMMEImpl{ + selectSql: `select id, ne_type, ne_name, rm_uid, timestamp, event_type, event_json, created_at from ue_event_mme`, + + resultMap: map[string]string{ + "id": "ID", + "ne_type": "NeType", + "ne_name": "NeName", + "rm_uid": "RmUID", + "timestamp": "Timestamp", + "event_type": "EventType", + "event_json": "EventJSONStr", + "created_at": "CreatedAt", + }, +} + +// UEEventMMEImpl UE会话事件 数据层处理 +type UEEventMMEImpl struct { + // 查询视图对象SQL + selectSql string + // 结果字段与实体映射 + resultMap map[string]string +} + +// convertResultRows 将结果记录转实体结果组 +func (r *UEEventMMEImpl) convertResultRows(rows []map[string]any) []model.UEEventMME { + arr := make([]model.UEEventMME, 0) + for _, row := range rows { + item := model.UEEventMME{} + for key, value := range row { + if keyMapper, ok := r.resultMap[key]; ok { + repo.SetFieldValue(&item, keyMapper, value) + } + } + arr = append(arr, item) + } + return arr +} + +// SelectPage 根据条件分页查询 +func (r *UEEventMMEImpl) SelectPage(querys model.UEEventMMEQuery) map[string]any { + // 查询条件拼接 + var conditions []string + var params []any + if querys.NeType != "" { + conditions = append(conditions, "ne_type = ?") + params = append(params, querys.NeType) + } + if querys.RmUID != "" { + conditions = append(conditions, "rm_uid = ?") + params = append(params, querys.RmUID) + } + if querys.StartTime != "" { + conditions = append(conditions, "timestamp >= ?") + if len(querys.StartTime) == 13 { + querys.StartTime = querys.StartTime[:10] + } + params = append(params, querys.StartTime) + } + if querys.EndTime != "" { + conditions = append(conditions, "timestamp <= ?") + if len(querys.EndTime) == 13 { + querys.EndTime = querys.EndTime[:10] + } + params = append(params, querys.EndTime) + } + if querys.EventType != "" { + eventTypes := strings.Split(querys.EventType, ",") + placeholder := repo.KeyPlaceholderByQuery(len(eventTypes)) + conditions = append(conditions, fmt.Sprintf("event_type in (%s)", placeholder)) + for _, eventType := range eventTypes { + params = append(params, eventType) + } + } + if querys.IMSI != "" { + conditions = append(conditions, "JSON_EXTRACT(event_json, '$.imsi') = ?") + params = append(params, querys.IMSI) + } + + // 构建查询条件语句 + whereSql := "" + if len(conditions) > 0 { + whereSql += " where " + strings.Join(conditions, " and ") + } + + result := map[string]any{ + "total": 0, + "rows": []model.UEEventMME{}, + } + + // 查询数量 长度为0直接返回 + totalSql := "select count(1) as 'total' from ue_event_mme" + totalRows, err := datasource.RawDB("", totalSql+whereSql, params) + if err != nil { + logger.Errorf("total err => %v", err) + return result + } + total := parse.Number(totalRows[0]["total"]) + if total == 0 { + return result + } else { + result["total"] = total + } + + // 分页 + pageNum, pageSize := repo.PageNumSize(querys.PageNum, querys.PageSize) + pageSql := " limit ?,? " + params = append(params, pageNum*pageSize) + params = append(params, pageSize) + + // 排序 + orderSql := "" + if querys.SortField != "" { + sortSql := querys.SortField + if querys.SortOrder != "" { + if querys.SortOrder == "desc" { + sortSql += " desc " + } else { + sortSql += " asc " + } + } + orderSql = fmt.Sprintf(" order by id desc, %s ", sortSql) + } + + // 查询数据 + querySql := r.selectSql + whereSql + orderSql + pageSql + results, err := datasource.RawDB("", querySql, params) + if err != nil { + logger.Errorf("query err => %v", err) + } + + // 转换实体 + result["rows"] = r.convertResultRows(results) + return result +} + +// SelectByIds 通过ID查询 +func (r *UEEventMMEImpl) SelectByIds(ueIds []string) []model.UEEventMME { + placeholder := repo.KeyPlaceholderByQuery(len(ueIds)) + querySql := r.selectSql + " where id in (" + placeholder + ")" + parameters := repo.ConvertIdsSlice(ueIds) + results, err := datasource.RawDB("", querySql, parameters) + if err != nil { + logger.Errorf("query err => %v", err) + return []model.UEEventMME{} + } + // 转换实体 + return r.convertResultRows(results) +} + +// DeleteByIds 批量删除信息 +func (r *UEEventMMEImpl) DeleteByIds(ueIds []string) int64 { + placeholder := repo.KeyPlaceholderByQuery(len(ueIds)) + sql := "delete from ue_event_mme where id in (" + placeholder + ")" + parameters := repo.ConvertIdsSlice(ueIds) + results, err := datasource.ExecDB("", sql, parameters) + if err != nil { + logger.Errorf("delete err => %v", err) + return 0 + } + return results +} diff --git a/src/modules/network_data/service/cdr_event.go b/src/modules/network_data/service/cdr_event.go deleted file mode 100644 index b05234cd..00000000 --- a/src/modules/network_data/service/cdr_event.go +++ /dev/null @@ -1,21 +0,0 @@ -package service - -import "be.ems/src/modules/network_data/model" - -// CDR会话事件 服务层接口 -type ICDREvent interface { - // SelectPage 根据条件分页查询 - SelectPage(querys model.CDREventQuery) map[string]any - - // DeleteByIds 批量删除信息 - DeleteByIds(cdrIds []string) (int64, error) -} - -// CDR会话事件 服务层接口 -type SMFCDREvent interface { - // SelectPage 根据条件分页查询 - SelectPage(querys model.SMFCDREventQuery) map[string]any - - // DeleteByIds 批量删除信息 - DeleteByIds(cdrIds []string) (int64, error) -} diff --git a/src/modules/network_data/service/cdr_event.impl.go b/src/modules/network_data/service/cdr_event.impl.go deleted file mode 100644 index fef4a13c..00000000 --- a/src/modules/network_data/service/cdr_event.impl.go +++ /dev/null @@ -1,69 +0,0 @@ -package service - -import ( - "fmt" - - "be.ems/src/modules/network_data/model" - "be.ems/src/modules/network_data/repository" -) - -// 实例化数据层 CDREventImpl 结构体 -var NewCDREventImpl = &CDREventImpl{ - cdrEventRepository: repository.NewCDREventImpl, -} - -var NewSMFCDREventImpl = &SMFCDREventImpl{ - cdrEventRepository: repository.NewSMFCDREventImpl, -} - -// CDREventImpl CDR会话事件 服务层处理 -type CDREventImpl struct { - // CDR会话事件数据信息 - cdrEventRepository repository.ICDREvent -} - -type SMFCDREventImpl struct { - // CDR会话事件数据信息 - cdrEventRepository repository.SMFCDREvent -} - -// SelectPage 根据条件分页查询 -func (r *CDREventImpl) SelectPage(querys model.CDREventQuery) map[string]any { - return r.cdrEventRepository.SelectPage(querys) -} - -// DeleteByIds 批量删除信息 -func (r *CDREventImpl) DeleteByIds(cdrIds []string) (int64, error) { - // 检查是否存在 - ids := r.cdrEventRepository.SelectByIds(cdrIds) - if len(ids) <= 0 { - return 0, fmt.Errorf("not data") - } - - if len(ids) == len(cdrIds) { - rows := r.cdrEventRepository.DeleteByIds(cdrIds) - return rows, nil - } - // 删除信息失败! - return 0, fmt.Errorf("delete fail") -} - -func (r *SMFCDREventImpl) SelectPage(querys model.SMFCDREventQuery) map[string]any { - return r.cdrEventRepository.SelectPage(querys) -} - -// DeleteByIds 批量删除信息 -func (r *SMFCDREventImpl) DeleteByIds(cdrIds []string) (int64, error) { - // 检查是否存在 - ids := r.cdrEventRepository.SelectByIds(cdrIds) - if len(ids) <= 0 { - return 0, fmt.Errorf("not data") - } - - if len(ids) == len(cdrIds) { - rows := r.cdrEventRepository.DeleteByIds(cdrIds) - return rows, nil - } - // 删除信息失败! - return 0, fmt.Errorf("delete fail") -} diff --git a/src/modules/network_data/service/cdr_event_ims.go b/src/modules/network_data/service/cdr_event_ims.go new file mode 100644 index 00000000..2f5be53e --- /dev/null +++ b/src/modules/network_data/service/cdr_event_ims.go @@ -0,0 +1,12 @@ +package service + +import "be.ems/src/modules/network_data/model" + +// CDR会话事件IMS 服务层接口 +type ICDREventIMS interface { + // SelectPage 根据条件分页查询 + SelectPage(querys model.CDREventIMSQuery) map[string]any + + // DeleteByIds 批量删除信息 + DeleteByIds(cdrIds []string) (int64, error) +} diff --git a/src/modules/network_data/service/cdr_event_ims.impl.go b/src/modules/network_data/service/cdr_event_ims.impl.go new file mode 100644 index 00000000..15dfbd81 --- /dev/null +++ b/src/modules/network_data/service/cdr_event_ims.impl.go @@ -0,0 +1,40 @@ +package service + +import ( + "fmt" + + "be.ems/src/modules/network_data/model" + "be.ems/src/modules/network_data/repository" +) + +// 实例化数据层 NewCDREventIMSImpl 结构体 +var NewCDREventIMSImpl = &CDREventIMSImpl{ + cdrEventIMSRepository: repository.NewCDREventIMSImpl, +} + +// CDREventImpl CDR会话事件IMS 服务层处理 +type CDREventIMSImpl struct { + // CDR会话事件数据信息 + cdrEventIMSRepository repository.ICDREventIMS +} + +// SelectPage 根据条件分页查询 +func (r *CDREventIMSImpl) SelectPage(querys model.CDREventIMSQuery) map[string]any { + return r.cdrEventIMSRepository.SelectPage(querys) +} + +// DeleteByIds 批量删除信息 +func (r *CDREventIMSImpl) DeleteByIds(cdrIds []string) (int64, error) { + // 检查是否存在 + ids := r.cdrEventIMSRepository.SelectByIds(cdrIds) + if len(ids) <= 0 { + return 0, fmt.Errorf("not data") + } + + if len(ids) == len(cdrIds) { + rows := r.cdrEventIMSRepository.DeleteByIds(cdrIds) + return rows, nil + } + // 删除信息失败! + return 0, fmt.Errorf("delete fail") +} diff --git a/src/modules/network_data/service/cdr_event_smf.go b/src/modules/network_data/service/cdr_event_smf.go new file mode 100644 index 00000000..1e55a690 --- /dev/null +++ b/src/modules/network_data/service/cdr_event_smf.go @@ -0,0 +1,12 @@ +package service + +import "be.ems/src/modules/network_data/model" + +// CDR会话事件SMF 服务层接口 +type ICDREventSMF interface { + // SelectPage 根据条件分页查询 + SelectPage(querys model.CDREventSMFQuery) map[string]any + + // DeleteByIds 批量删除信息 + DeleteByIds(cdrIds []string) (int64, error) +} diff --git a/src/modules/network_data/service/cdr_event_smf.impl.go b/src/modules/network_data/service/cdr_event_smf.impl.go new file mode 100644 index 00000000..09d2e48a --- /dev/null +++ b/src/modules/network_data/service/cdr_event_smf.impl.go @@ -0,0 +1,37 @@ +package service + +import ( + "fmt" + + "be.ems/src/modules/network_data/model" + "be.ems/src/modules/network_data/repository" +) + +var NewCDREventSMFImpl = &CDREventSMFImpl{ + cdrEventRepository: repository.NewCDREventSMFImpl, +} + +type CDREventSMFImpl struct { + // CDR会话事件数据信息 + cdrEventRepository repository.ICDREventSMF +} + +func (r *CDREventSMFImpl) SelectPage(querys model.CDREventSMFQuery) map[string]any { + return r.cdrEventRepository.SelectPage(querys) +} + +// DeleteByIds 批量删除信息 +func (r *CDREventSMFImpl) DeleteByIds(cdrIds []string) (int64, error) { + // 检查是否存在 + ids := r.cdrEventRepository.SelectByIds(cdrIds) + if len(ids) <= 0 { + return 0, fmt.Errorf("not data") + } + + if len(ids) == len(cdrIds) { + rows := r.cdrEventRepository.DeleteByIds(cdrIds) + return rows, nil + } + // 删除信息失败! + return 0, fmt.Errorf("delete fail") +} diff --git a/src/modules/network_data/service/udm_auth.go b/src/modules/network_data/service/udm_auth.go new file mode 100644 index 00000000..6e2b14e1 --- /dev/null +++ b/src/modules/network_data/service/udm_auth.go @@ -0,0 +1,28 @@ +package service + +import "be.ems/src/modules/network_data/model" + +// UDM鉴权信息 服务层接口 +type IUDMAuth interface { + // ResetData 重置鉴权用户数据,清空数据库重新同步Redis数据 + ResetData(neId string) int64 + + // SelectPage 分页查询数据库 + SelectPage(query map[string]any) map[string]any + + // SelectList 查询数据库 + SelectList(u model.UDMAuth) []model.UDMAuth + + // Insert 从数据中读取后删除imsi再存入数据库 + // imsi长度15,ki长度32,opc长度0或者32 + Insert(neId string, u model.UDMAuth) int64 + + // InsertData 导入文件数据 dataType目前两种:txt/csv + InsertData(neId, dataType string, data any) int64 + + // Delete 删除单个不重新加载 + Delete(neID, imsi string) int64 + + // LoadData 删除范围后重新加载 num表示imsi后几位 + LoadData(neID, imsi, num string) int64 +} diff --git a/src/modules/network_data/service/udm_auth.impl.go b/src/modules/network_data/service/udm_auth.impl.go new file mode 100644 index 00000000..d7998a10 --- /dev/null +++ b/src/modules/network_data/service/udm_auth.impl.go @@ -0,0 +1,146 @@ +package service + +import ( + "fmt" + "strings" + + "be.ems/src/framework/redis" + "be.ems/src/modules/network_data/model" + "be.ems/src/modules/network_data/repository" +) + +// 实例化服务层 UDMAuthImpl 结构体 +var NewUDMAuthImpl = &UDMAuthImpl{ + udmAuthRepository: repository.NewUDMAuthImpl, +} + +// UDM鉴权信息 服务层处理 +type UDMAuthImpl struct { + // UDM鉴权信息数据信息 + udmAuthRepository repository.IUDMAuth +} + +// dataByRedis UDM鉴权用户 db:0 中 ausf:* +func (r *UDMAuthImpl) dataByRedis(imsi, neId string) []model.UDMAuth { + arr := []model.UDMAuth{} + key := fmt.Sprintf("ausf:%s", imsi) + ausfArr, err := redis.GetKeys("udmuser", key) + if err != nil { + return arr + } + for _, key := range ausfArr { + m, err := redis.GetHash("udmuser", key) + if err != nil { + continue + } + + // 跳过-号数据 + imsi := key[5:] + if strings.Contains(imsi, "-") { + continue + } + + amf := "" + if v, ok := m["amf"]; ok { + amf = strings.Replace(v, "\r\n", "", 1) + } + a := model.UDMAuth{ + IMSI: imsi, + Amf: amf, + Status: "1", // 默认给1 + Ki: m["ki"], + AlgoIndex: m["algo"], + Opc: m["opc"], + NeId: neId, + } + arr = append(arr, a) + } + return arr +} + +// ResetData 重置鉴权用户数据,清空数据库重新同步Redis数据 +func (r *UDMAuthImpl) ResetData(neId string) int64 { + authArr := r.dataByRedis("*", neId) + // 数据清空后添加 + go r.udmAuthRepository.ClearAndInsert(neId, authArr) + return int64(len(authArr)) +} + +// SelectPage 分页查询数据库 +func (r *UDMAuthImpl) SelectPage(query map[string]any) map[string]any { + return r.udmAuthRepository.SelectPage(query) +} + +// SelectList 查询数据库 +func (r *UDMAuthImpl) SelectList(u model.UDMAuth) []model.UDMAuth { + return r.udmAuthRepository.SelectList(u) +} + +// Insert 从数据中读取后删除imsi再存入数据库 +// imsi长度15,ki长度32,opc长度0或者32 +func (r *UDMAuthImpl) Insert(neId string, u model.UDMAuth) int64 { + uArr := r.dataByRedis(u.IMSI, neId) + if len(uArr) > 0 { + r.udmAuthRepository.Delete(neId, u.IMSI) + return r.udmAuthRepository.Inserts(uArr) + } + return 0 +} + +// InsertData 导入文件数据 dataType目前两种:txt/csv +func (r *UDMAuthImpl) InsertData(neId, dataType string, data any) int64 { + // imsi截取前缀,重新获取部分数据 + prefixes := make(map[string]struct{}) + + if dataType == "csv" { + for _, v := range data.([]map[string]string) { + imsi := v["imsi"] + if len(imsi) < 6 { + continue + } + prefix := imsi[:len(imsi)-4] + prefixes[prefix] = struct{}{} + } + } + if dataType == "txt" { + for _, v := range data.([][]string) { + imsi := v[0] + if len(imsi) < 6 { + continue + } + prefix := imsi[:len(imsi)-4] + prefixes[prefix] = struct{}{} + } + } + + // 根据前缀重新加载插入 + var num int64 = 0 + for prefix := range prefixes { + // 直接删除前缀的记录 + r.udmAuthRepository.DeletePrefixByIMSI(neId, prefix) + // keys ausf:4600001000004* + authArr := r.dataByRedis(prefix+"*", neId) + if len(authArr) > 0 { + num += r.udmAuthRepository.Inserts(authArr) + } + } + return num +} + +// Delete 删除单个不重新加载 +func (r *UDMAuthImpl) Delete(neId, imsi string) int64 { + return r.udmAuthRepository.Delete(neId, imsi) +} + +// LoadData 删除范围后重新加载 num表示imsi后几位 +func (r *UDMAuthImpl) LoadData(neId, imsi, num string) int64 { + prefix := imsi[:len(imsi)-len(num)-1] + // 直接删除前缀的记录 + delNum := r.udmAuthRepository.DeletePrefixByIMSI(neId, prefix) + // keys ausf:4600001000004* + authArr := r.dataByRedis(prefix+"*", neId) + if len(authArr) > 0 { + return r.udmAuthRepository.Inserts(authArr) + } + return delNum +} diff --git a/src/modules/network_data/service/udm_sub.go b/src/modules/network_data/service/udm_sub.go new file mode 100644 index 00000000..cb03afe7 --- /dev/null +++ b/src/modules/network_data/service/udm_sub.go @@ -0,0 +1,28 @@ +package service + +import "be.ems/src/modules/network_data/model" + +// UDM签约用户信息 服务层接口 +type IUDMSub interface { + // ResetData 重置鉴权用户数据,清空数据库重新同步Redis数据 + ResetData(neId string) int64 + + // SelectPage 分页查询数据库 + SelectPage(query map[string]any) map[string]any + + // SelectList 查询数据库 + SelectList(u model.UDMSub) []model.UDMSub + + // Insert 从数据中读取后删除imsi再存入数据库 + // imsi长度15,ki长度32,opc长度0或者32 + Insert(neId string, u model.UDMSub) int64 + + // InsertData 导入文件数据 dataType目前两种:txt/csv + InsertData(neId, dataType string, data any) int64 + + // Delete 删除单个不重新加载 + Delete(neId, imsi string) int64 + + // LoadData 删除范围后重新加载 num表示imsi后几位 + LoadData(neId, imsi, num string) int64 +} diff --git a/src/modules/network_data/service/udm_sub.impl.go b/src/modules/network_data/service/udm_sub.impl.go new file mode 100644 index 00000000..768e48a8 --- /dev/null +++ b/src/modules/network_data/service/udm_sub.impl.go @@ -0,0 +1,164 @@ +package service + +import ( + "fmt" + "strings" + + "be.ems/src/framework/redis" + "be.ems/src/modules/network_data/model" + "be.ems/src/modules/network_data/repository" +) + +// 实例化服务层 UDMSubImpl 结构体 +var NewUDMSubImpl = &UDMSubImpl{ + udmSubRepository: repository.NewUDMSubImpl, +} + +// UDM签约信息 服务层处理 +type UDMSubImpl struct { + // UDM签约信息数据信息 + udmSubRepository repository.IUDMSub +} + +// dataByRedis UDM签约用户 db:0 中 udm-sd:* +func (r *UDMSubImpl) dataByRedis(imsi, neId string) []model.UDMSub { + arr := []model.UDMSub{} + key := fmt.Sprintf("udm-sd:%s", imsi) + udmsdArr, err := redis.GetKeys("udmuser", key) + if err != nil { + return arr + } + for _, key := range udmsdArr { + m, err := redis.GetHash("udmuser", key) + if err != nil { + continue + } + + a := model.UDMSub{ + IMSI: key[7:], + Msisdn: m["gpsi"], // 46003550072 + SmfSel: m["smf-sel"], + SmData: m["sm-dat"], // 1-000001&cmnet&ims&3gnet + NeId: neId, + } + + // def_ambr,def_nssai,0,def_arfb,def_sar,3,1,12000,1,1000,0,1,- + if v, ok := m["am-dat"]; ok { + arr := strings.Split(v, ",") + a.Ambr = arr[0] + a.Nssai = arr[1] + a.Rat = arr[2] + a.Arfb = arr[3] + a.Sar = arr[4] + a.Cn = arr[5] + } + // 1,64,24,65,def_eps,1,2,010200000000,- + if v, ok := m["eps-dat"]; ok { + arr := strings.Split(v, ",") + // 跳过非常规数据 + if len(arr) > 9 { + continue + } + a.EpsDat = v + a.EpsFlag = arr[0] + a.EpsOdb = arr[1] + a.HplmnOdb = arr[2] + a.Ard = arr[3] + a.Epstpl = arr[4] + a.ContextId = arr[5] + a.ApnContext = arr[7] + // [6] 是不要的,导入和导出不用 + a.StaticIp = arr[8] + } + + arr = append(arr, a) + } + return arr +} + +// ResetData 重置鉴权用户数据,清空数据库重新同步Redis数据 +func (r *UDMSubImpl) ResetData(neId string) int64 { + subArr := r.dataByRedis("*", neId) + // 数据清空后添加 + go r.udmSubRepository.ClearAndInsert(neId, subArr) + return int64(len(subArr)) +} + +// SelectPage 分页查询数据库 +func (r *UDMSubImpl) SelectPage(query map[string]any) map[string]any { + return r.udmSubRepository.SelectPage(query) +} + +// SelectList 查询数据库 +func (r *UDMSubImpl) SelectList(u model.UDMSub) []model.UDMSub { + return r.udmSubRepository.SelectList(u) +} + +// Insert 从数据中读取后删除imsi再存入数据库 +// imsi长度15,ki长度32,opc长度0或者32 +func (r *UDMSubImpl) Insert(neId string, u model.UDMSub) int64 { + uArr := r.dataByRedis(u.IMSI, neId) + if len(uArr) > 0 { + r.udmSubRepository.Delete(neId, u.IMSI) + return r.udmSubRepository.Inserts(uArr) + } + return 0 +} + +// InsertData 导入文件数据 dataType目前两种:txt/csv +func (r *UDMSubImpl) InsertData(neId, dataType string, data any) int64 { + // imsi截取前缀,重新获取部分数据 + prefixes := make(map[string]struct{}) + + if dataType == "csv" { + for _, v := range data.([]map[string]string) { + imsi := v["imsi"] + if len(imsi) < 6 { + continue + } + prefix := imsi[:len(imsi)-4] + prefixes[prefix] = struct{}{} + } + } + if dataType == "txt" { + for _, v := range data.([][]string) { + imsi := v[0] + if len(imsi) < 6 { + continue + } + prefix := imsi[:len(imsi)-4] + prefixes[prefix] = struct{}{} + } + } + + // 根据前缀重新加载插入 + var num int64 = 0 + for prefix := range prefixes { + // 直接删除前缀的记录 + r.udmSubRepository.DeletePrefixByIMSI(neId, prefix) + // keys udm-sd:4600001000004* + subArr := r.dataByRedis(prefix+"*", neId) + if len(subArr) > 0 { + num += r.udmSubRepository.Inserts(subArr) + } + } + return num +} + +// Delete 删除单个不重新加载 +func (r *UDMSubImpl) Delete(neId, imsi string) int64 { + return r.udmSubRepository.Delete(neId, imsi) +} + +// LoadData 删除范围后重新加载 num表示imsi后几位 +func (r *UDMSubImpl) LoadData(neId, imsi, num string) int64 { + prefix := imsi[:len(imsi)-len(num)-1] + // 直接删除前缀的记录 + delNum := r.udmSubRepository.DeletePrefixByIMSI(neId, prefix) + // keys udm-sd:4600001000004* + authArr := r.dataByRedis(prefix+"*", neId) + if len(authArr) > 0 { + return r.udmSubRepository.Inserts(authArr) + } + return delNum +} diff --git a/src/modules/network_data/service/ue_event.go b/src/modules/network_data/service/ue_event_amf.go similarity index 60% rename from src/modules/network_data/service/ue_event.go rename to src/modules/network_data/service/ue_event_amf.go index 367bb240..e5f77a63 100644 --- a/src/modules/network_data/service/ue_event.go +++ b/src/modules/network_data/service/ue_event_amf.go @@ -2,10 +2,10 @@ package service import "be.ems/src/modules/network_data/model" -// UE会话事件 服务层接口 -type IUEEvent interface { +// UE会话事件AMF 服务层接口 +type IUEEventAMF interface { // SelectPage 根据条件分页查询 - SelectPage(querys model.UEEventQuery) map[string]any + SelectPage(querys model.UEEventAMFQuery) map[string]any // DeleteByIds 批量删除信息 DeleteByIds(ueIds []string) (int64, error) diff --git a/src/modules/network_data/service/ue_event.impl.go b/src/modules/network_data/service/ue_event_amf.impl.go similarity index 58% rename from src/modules/network_data/service/ue_event.impl.go rename to src/modules/network_data/service/ue_event_amf.impl.go index 16f7e079..8d5f61c9 100644 --- a/src/modules/network_data/service/ue_event.impl.go +++ b/src/modules/network_data/service/ue_event_amf.impl.go @@ -7,24 +7,24 @@ import ( "be.ems/src/modules/network_data/repository" ) -// 实例化数据层 UEEventImpl 结构体 -var NewUEEventImpl = &UEEventImpl{ - ueEventRepository: repository.NewUEEventImpl, +// 实例化数据层 UEEventMMEImpl 结构体 +var NewUEEventMMEImpl = &UEEventMMEImpl{ + ueEventRepository: repository.NewUEEventMMEImpl, } -// UEEventImpl UE会话事件 服务层处理 -type UEEventImpl struct { +// UEEventMMEImpl UE会话事件MME 服务层处理 +type UEEventMMEImpl struct { // UE会话事件数据信息 - ueEventRepository repository.IUEEvent + ueEventRepository repository.IUEEventMME } // SelectPage 根据条件分页查询 -func (r *UEEventImpl) SelectPage(querys model.UEEventQuery) map[string]any { +func (r *UEEventMMEImpl) SelectPage(querys model.UEEventMMEQuery) map[string]any { return r.ueEventRepository.SelectPage(querys) } // DeleteByIds 批量删除信息 -func (r *UEEventImpl) DeleteByIds(ueIds []string) (int64, error) { +func (r *UEEventMMEImpl) DeleteByIds(ueIds []string) (int64, error) { // 检查是否存在 ids := r.ueEventRepository.SelectByIds(ueIds) if len(ids) <= 0 { diff --git a/src/modules/network_data/service/ue_event_mme.go b/src/modules/network_data/service/ue_event_mme.go new file mode 100644 index 00000000..d4b5dd86 --- /dev/null +++ b/src/modules/network_data/service/ue_event_mme.go @@ -0,0 +1,12 @@ +package service + +import "be.ems/src/modules/network_data/model" + +// UE会话事件MME 服务层接口 +type IUEEventMME interface { + // SelectPage 根据条件分页查询 + SelectPage(querys model.UEEventMMEQuery) map[string]any + + // DeleteByIds 批量删除信息 + DeleteByIds(ueIds []string) (int64, error) +} diff --git a/src/modules/network_data/service/ue_event_mme.impl.go b/src/modules/network_data/service/ue_event_mme.impl.go new file mode 100644 index 00000000..9c7e0710 --- /dev/null +++ b/src/modules/network_data/service/ue_event_mme.impl.go @@ -0,0 +1,40 @@ +package service + +import ( + "fmt" + + "be.ems/src/modules/network_data/model" + "be.ems/src/modules/network_data/repository" +) + +// 实例化数据层 UEEventAMFImpl 结构体 +var NewUEEventAMFImpl = &UEEventAMFImpl{ + ueEventRepository: repository.NewUEEventAMFImpl, +} + +// UEEventAMFImpl UE会话事件AMF 服务层处理 +type UEEventAMFImpl struct { + // UE会话事件数据信息 + ueEventRepository repository.IUEEventAMF +} + +// SelectPage 根据条件分页查询 +func (r *UEEventAMFImpl) SelectPage(querys model.UEEventAMFQuery) map[string]any { + return r.ueEventRepository.SelectPage(querys) +} + +// DeleteByIds 批量删除信息 +func (r *UEEventAMFImpl) DeleteByIds(ueIds []string) (int64, error) { + // 检查是否存在 + ids := r.ueEventRepository.SelectByIds(ueIds) + if len(ids) <= 0 { + return 0, fmt.Errorf("no data") + } + + if len(ids) == len(ueIds) { + rows := r.ueEventRepository.DeleteByIds(ueIds) + return rows, nil + } + // 删除信息失败! + return 0, fmt.Errorf("delete fail") +} diff --git a/src/modules/network_element/controller/ne_action.go b/src/modules/network_element/controller/action.go similarity index 75% rename from src/modules/network_element/controller/ne_action.go rename to src/modules/network_element/controller/action.go index f38e68ab..4d597356 100644 --- a/src/modules/network_element/controller/ne_action.go +++ b/src/modules/network_element/controller/action.go @@ -3,6 +3,7 @@ package controller import ( "fmt" "path/filepath" + "runtime" "strings" "be.ems/src/framework/i18n" @@ -50,19 +51,30 @@ func (s *NeActionController) PushFile(c *gin.Context) { return } - // 本地文件 - localPath := file.ParseUploadFilePath(body.UploadPath) - nePath := "/tmp" //config.Get("mml.upload").(string) - // 复制到远程 - err := ssh.FileSCPLocalToNe(neInfo.IP, localPath, nePath) + // 网元主机的SSH客户端 + sshClient, err := s.neInfoService.NeRunSSHClient(neInfo.NeType, neInfo.NeId) if err != nil { c.JSON(200, result.ErrMsg(err.Error())) return } + defer sshClient.Close() + // 网元主机的SSH客户端进行文件传输 + sftpClient, err := sshClient.NewClientSFTP() + if err != nil { + c.JSON(200, result.ErrMsg(err.Error())) + return + } + defer sftpClient.Close() + + // 本地文件 + localFilePath := file.ParseUploadFilePath(body.UploadPath) + neFilePath := fmt.Sprintf("/tmp/%s", filepath.Base(localFilePath)) + // 复制到远程 + if err = sftpClient.CopyFileLocalToRemote(localFilePath, neFilePath); err != nil { + c.JSON(200, result.ErrMsg(fmt.Sprintf("%s : please check if scp remote copy is allowed", neInfo.NeType))) + return + } - // 网元端文件路径 - fileName := localPath[strings.LastIndex(localPath, "/")+1:] - neFilePath := fmt.Sprintf("%s/%s", nePath, fileName) c.JSON(200, result.OkData(filepath.ToSlash(neFilePath))) } @@ -89,14 +101,32 @@ func (s *NeActionController) PullFile(c *gin.Context) { return } - nePath := fmt.Sprintf("%s/%s", querys.Path, querys.FileName) - localPath := fmt.Sprintf("/tmp/omc/pullFile/%s", querys.FileName) - err := ssh.FileSCPNeToLocal(neInfo.IP, nePath, localPath) + // 网元主机的SSH客户端 + sshClient, err := s.neInfoService.NeRunSSHClient(neInfo.NeType, neInfo.NeId) if err != nil { c.JSON(200, result.ErrMsg(err.Error())) return } - c.FileAttachment(localPath, querys.FileName) + defer sshClient.Close() + // 网元主机的SSH客户端进行文件传输 + sftpClient, err := sshClient.NewClientSFTP() + if err != nil { + c.JSON(200, result.ErrMsg(err.Error())) + return + } + defer sftpClient.Close() + + nePath := fmt.Sprintf("%s/%s", querys.Path, querys.FileName) + localFilePath := fmt.Sprintf("/tmp/omc/pullFile%s", nePath) + if runtime.GOOS == "windows" { + localFilePath = fmt.Sprintf("C:%s", localFilePath) + } + // 复制到本地 + if err = sftpClient.CopyFileRemoteToLocal(nePath, localFilePath); err != nil { + c.JSON(200, result.ErrMsg(err.Error())) + return + } + c.FileAttachment(localFilePath, querys.FileName) } // 网元端文件列表 @@ -124,7 +154,16 @@ func (s *NeActionController) Files(c *gin.Context) { return } - totalSize, rows, err := ssh.FileList(querys.Path, neInfo.IP, querys.Search) + // 网元主机的SSH客户端 + sshClient, err := s.neInfoService.NeRunSSHClient(neInfo.NeType, neInfo.NeId) + if err != nil { + c.JSON(200, result.ErrMsg(err.Error())) + return + } + defer sshClient.Close() + + // 获取文件列表 + totalSize, rows, err := ssh.FileList(sshClient, querys.Path, querys.Search) if err != nil { c.JSON(200, result.Ok(map[string]any{ "path": querys.Path, @@ -184,7 +223,7 @@ func (s *NeActionController) Service(c *gin.Context) { cmdStr = fmt.Sprintf("nohup sh -c \"sudo systemctl stop restagent && sleep 5s && sudo systemctl %s restagent\" > /dev/null 2>&1 &", body.Action) } else if neTypeLower == "ims" { if body.Action == "restart" { - cmdStr = "sudo ims-stop || true && sudo ims-start" + cmdStr = "ims-stop || true && ims-start" } else { cmdStr = fmt.Sprintf("sudo ims-%s", body.Action) } @@ -197,7 +236,7 @@ func (s *NeActionController) Service(c *gin.Context) { cmdStr = "sudo shutdown -h now" } - _, err := s.neInfoService.NeRunCMD(body.NeType, body.NeID, cmdStr) + _, err := s.neInfoService.NeRunSSHCmd(body.NeType, body.NeID, cmdStr) if err != nil { c.JSON(200, result.ErrMsg(err.Error())) return diff --git a/src/modules/network_element/controller/ne_config.go b/src/modules/network_element/controller/ne_config.go new file mode 100644 index 00000000..9c804ae7 --- /dev/null +++ b/src/modules/network_element/controller/ne_config.go @@ -0,0 +1,202 @@ +package controller + +import ( + "encoding/json" + "strings" + + "be.ems/src/framework/i18n" + "be.ems/src/framework/utils/ctx" + "be.ems/src/framework/utils/parse" + "be.ems/src/framework/vo/result" + neFetchlink "be.ems/src/modules/network_element/fetch_link" + "be.ems/src/modules/network_element/model" + neService "be.ems/src/modules/network_element/service" + "github.com/gin-gonic/gin" + "github.com/gin-gonic/gin/binding" +) + +// NewNeConfig 网元参数配置 实例化控制层 +var NewNeConfig = &NeConfigController{ + neConfigService: neService.NewNeConfigImpl, + neInfoService: neService.NewNeInfoImpl, +} + +// 网元参数配置 +// +// PATH /config +type NeConfigController struct { + // 网元参数配置可用属性值服务 + neConfigService neService.INeConfig + // 网元信息服务 + neInfoService neService.INeInfo +} + +// 网元参数配置可用属性值列表 +// +// GET /list +func (s *NeConfigController) List(c *gin.Context) { + querys := ctx.QueryMap(c) + data := s.neConfigService.SelectPage(querys) + + c.JSON(200, result.Ok(data)) +} + +// 网元参数配置可用属性值信息 +// +// GET /info/:id +func (s *NeConfigController) Info(c *gin.Context) { + language := ctx.AcceptLanguage(c) + id := c.Param("id") + if id == "" { + c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + return + } + + data := s.neConfigService.SelectById(id) + if data.ID != id { + // 没有可访问参数配置数据! + c.JSON(200, result.ErrMsg(i18n.TKey(language, "neConfig.noData"))) + return + } + + // 将字符串转json数据 + if err := json.Unmarshal([]byte(data.ParamJSONStr), &data.ParamData); err != nil { + c.JSON(400, result.CodeMsg(400, err.Error())) + return + } + c.JSON(200, result.OkData(data)) +} + +// 网元参数配置可用属性值新增 +// +// POST / +func (s *NeConfigController) Add(c *gin.Context) { + language := ctx.AcceptLanguage(c) + var body model.NeConfig + if err := c.ShouldBindBodyWith(&body, binding.JSON); err != nil { + c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + return + } + + // 将json数据转字符串存储 + paramDataByte, err := json.Marshal(body.ParamData) + if err != nil { + c.JSON(400, result.CodeMsg(400, err.Error())) + return + } + body.ParamJSONStr = string(paramDataByte) + + insertId := s.neConfigService.Insert(body) + if insertId != "" { + c.JSON(200, result.Ok(nil)) + return + } + c.JSON(200, result.Err(nil)) +} + +// 网元参数配置可用属性值修改 +// +// PUT / +func (s *NeConfigController) Edit(c *gin.Context) { + language := ctx.AcceptLanguage(c) + var body model.NeConfig + err := c.ShouldBindBodyWith(&body, binding.JSON) + if err != nil || body.ID == "" { + c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + return + } + + // 检查是否存在 + data := s.neConfigService.SelectById(body.ID) + if data.ID != body.ID { + // 没有可访问主机命令数据! + c.JSON(200, result.ErrMsg(i18n.TKey(language, "neConfig.noData"))) + return + } + + // 将json数据转字符串存储 + paramDataByte, err := json.Marshal(body.ParamData) + if err != nil { + c.JSON(400, result.CodeMsg(400, err.Error())) + return + } + body.ParamJSONStr = string(paramDataByte) + + rows := s.neConfigService.Update(body) + if rows > 0 { + c.JSON(200, result.Ok(nil)) + return + } + c.JSON(200, result.Err(nil)) +} + +// 网元参数配置可用属性值删除 +// +// DELETE /:ids +func (s *NeConfigController) Remove(c *gin.Context) { + language := ctx.AcceptLanguage(c) + ids := c.Param("ids") + if ids == "" { + c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + return + } + // 处理字符转id数组后去重 + idsArr := strings.Split(ids, ",") + uniqueIDs := parse.RemoveDuplicates(idsArr) + if len(uniqueIDs) <= 0 { + c.JSON(200, result.Err(nil)) + return + } + rows, err := s.neConfigService.DeleteByIds(uniqueIDs) + if err != nil { + c.JSON(200, result.ErrMsg(i18n.TKey(language, err.Error()))) + return + } + msg := i18n.TTemplate(language, "app.common.deleteSuccess", map[string]any{"num": rows}) + c.JSON(200, result.OkMsg(msg)) +} + +// 网元参数配置可用属性值列表指定网元类型全部无分页 +// +// GET /list/:neType +func (s *NeConfigController) ListByNeType(c *gin.Context) { + language := ctx.AcceptLanguage(c) + neType := c.Param("neType") + if neType == "" { + c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + return + } + data := s.neConfigService.SelectNeConfigByNeType(neType) + c.JSON(200, result.OkData(data)) +} + +// 网元参数配置数据信息 +// +// GET /data +func (s *NeConfigController) Data(c *gin.Context) { + language := ctx.AcceptLanguage(c) + var querys struct { + NeType string `form:"neType" binding:"required"` // 网元类型 + NeId string `form:"neId" binding:"required"` // 网元ID + TopTag string `form:"topTag" binding:"required"` // 可用属性 + } + if err := c.ShouldBindQuery(&querys); err != nil { + c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + return + } + + neInfo := s.neInfoService.SelectNeInfoByNeTypeAndNeID(querys.NeType, querys.NeId) + if neInfo.NeId != querys.NeId || neInfo.IP == "" { + c.JSON(200, result.ErrMsg(i18n.TKey(language, "app.common.noNEInfo"))) + return + } + + // 网元直连 + resData, err := neFetchlink.NeConfigInfo(neInfo, querys.TopTag) + if err != nil { + c.JSON(200, result.ErrMsg(err.Error())) + return + } + + c.JSON(200, result.Ok(resData)) +} diff --git a/src/modules/network_element/controller/ne_host.go b/src/modules/network_element/controller/ne_host.go index 9336733a..57685740 100644 --- a/src/modules/network_element/controller/ne_host.go +++ b/src/modules/network_element/controller/ne_host.go @@ -203,6 +203,7 @@ func (s *NeHostController) Test(c *gin.Context) { return } defer client.Close() + // 是否有终止符 if strings.HasSuffix(client.LastResult, ">") || strings.HasSuffix(client.LastResult, "> ") || strings.HasSuffix(client.LastResult, "# ") { c.JSON(200, result.Ok(nil)) } else { diff --git a/src/modules/network_element/controller/ne_info.go b/src/modules/network_element/controller/ne_info.go index 177a19b2..ea0ded6e 100644 --- a/src/modules/network_element/controller/ne_info.go +++ b/src/modules/network_element/controller/ne_info.go @@ -9,6 +9,7 @@ import ( "be.ems/src/framework/utils/ctx" "be.ems/src/framework/utils/parse" "be.ems/src/framework/vo/result" + neFetchlink "be.ems/src/modules/network_element/fetch_link" "be.ems/src/modules/network_element/model" neService "be.ems/src/modules/network_element/service" "github.com/gin-gonic/gin" @@ -60,7 +61,7 @@ func (s *NeInfoController) State(c *gin.Context) { neKey := fmt.Sprintf("%s_%s", neInfo.NeType, neInfo.NeId) // 网元直连 - resData, err := neService.NeState(neInfo) + resData, err := neFetchlink.NeState(neInfo) if err != nil { mutex.Lock() // 异常取上次缓存 @@ -287,12 +288,12 @@ func (s *NeInfoController) Add(c *gin.Context) { } // 获取网元状态是否正常 - body.ServerState, err = neService.NeState(body) + body.ServerState, err = neFetchlink.NeState(body) if err != nil { body.Status = "0" } else { // 下发网管配置信息给网元 - _, err = neService.NeConfigOMC(body) + _, err = neFetchlink.NeConfigOMC(body) if err == nil { body.Status = "1" } else { @@ -376,12 +377,12 @@ func (s *NeInfoController) Edit(c *gin.Context) { } // 获取网元状态是否正常 - body.ServerState, err = neService.NeState(body) + body.ServerState, err = neFetchlink.NeState(body) if err != nil { body.Status = "0" } else { // 下发网管配置信息给网元 - _, err = neService.NeConfigOMC(body) + _, err = neFetchlink.NeConfigOMC(body) if err == nil { body.Status = "1" } else { diff --git a/src/modules/network_element/controller/ne_license.go b/src/modules/network_element/controller/ne_license.go index d503b8db..3b4dd4ce 100644 --- a/src/modules/network_element/controller/ne_license.go +++ b/src/modules/network_element/controller/ne_license.go @@ -6,6 +6,7 @@ import ( "be.ems/src/framework/i18n" "be.ems/src/framework/utils/ctx" "be.ems/src/framework/vo/result" + neFetchlink "be.ems/src/modules/network_element/fetch_link" "be.ems/src/modules/network_element/model" neService "be.ems/src/modules/network_element/service" "github.com/gin-gonic/gin" @@ -18,17 +19,17 @@ var NewNeLicense = &NeLicenseController{ neInfoService: neService.NewNeInfoImpl, } -// 网元授权激活信息请求 +// 网元授权激活请求 // // PATH /license type NeLicenseController struct { - // 网元授权激活信息服务 + // 网元授权激活服务 neLicenseService neService.INeLicense // 网元信息服务 neInfoService neService.INeInfo } -// 网元授权激活信息列表 +// 网元授权激活列表 // // GET /list func (s *NeLicenseController) List(c *gin.Context) { @@ -198,7 +199,7 @@ func (s *NeLicenseController) State(c *gin.Context) { c.JSON(200, result.ErrMsg(i18n.TKey(language, "app.common.noNEInfo"))) return } - if neState, err := neService.NeState(neInfo); err == nil { + if neState, err := neFetchlink.NeState(neInfo); err == nil && neState["sn"] != nil { neLicense.Status = "1" neLicense.SerialNum = fmt.Sprint(neState["sn"]) neLicense.ExpiryDate = fmt.Sprint(neState["expire"]) diff --git a/src/modules/network_element/controller/ne_software.go b/src/modules/network_element/controller/ne_software.go index d5658d7c..fb15beb8 100644 --- a/src/modules/network_element/controller/ne_software.go +++ b/src/modules/network_element/controller/ne_software.go @@ -18,15 +18,15 @@ var NewNeSoftware = &NeSoftwareController{ neSoftwareService: neService.NewNeSoftwareImpl, } -// 网元软件包信息请求 +// 网元软件包请求 // // PATH /software type NeSoftwareController struct { - // 网元软件包信息服务 + // 网元软件包服务 neSoftwareService neService.INeSoftware } -// 网元软件包信息列表 +// 网元软件包列表 // // GET /list func (s *NeSoftwareController) List(c *gin.Context) { @@ -36,7 +36,7 @@ func (s *NeSoftwareController) List(c *gin.Context) { c.JSON(200, result.Ok(data)) } -// 网元软件包信息信息 +// 网元软件包信息 // // GET /:softwareId func (s *NeSoftwareController) Info(c *gin.Context) { @@ -57,7 +57,7 @@ func (s *NeSoftwareController) Info(c *gin.Context) { c.JSON(200, result.OkData(neSoftware)) } -// 网元软件包信息新增 +// 网元软件包新增 // // POST / func (s *NeSoftwareController) Add(c *gin.Context) { @@ -98,7 +98,7 @@ func (s *NeSoftwareController) Add(c *gin.Context) { c.JSON(200, result.Err(nil)) } -// 网元软件包信息修改 +// 网元软件包修改 // // PUT / func (s *NeSoftwareController) Edit(c *gin.Context) { @@ -136,7 +136,7 @@ func (s *NeSoftwareController) Edit(c *gin.Context) { c.JSON(200, result.Err(nil)) } -// 网元软件包信息删除 +// 网元软件包删除 // // DELETE /:softwareIds func (s *NeSoftwareController) Remove(c *gin.Context) { diff --git a/src/modules/network_element/controller/ne_version.go b/src/modules/network_element/controller/ne_version.go index 94bc2d80..8df9b017 100644 --- a/src/modules/network_element/controller/ne_version.go +++ b/src/modules/network_element/controller/ne_version.go @@ -14,15 +14,15 @@ var NewNeVersion = &NeVersionController{ neVersionService: neService.NewNeVersionImpl, } -// 网元版本信息请求 +// 网元版本请求 // // PATH /version type NeVersionController struct { - // 网元版本信息服务 + // 网元版本服务 neVersionService neService.INeVersion } -// 网元版本信息列表 +// 网元版本列表 // // GET /list func (s *NeVersionController) List(c *gin.Context) { @@ -32,7 +32,7 @@ func (s *NeVersionController) List(c *gin.Context) { c.JSON(200, result.Ok(data)) } -// 网元版本信息信息 +// 网元版本信息 // // GET /:versionId func (s *NeVersionController) Info(c *gin.Context) { diff --git a/src/modules/network_element/service/ne_direct_link.go b/src/modules/network_element/fetch_link/ne_config.go similarity index 65% rename from src/modules/network_element/service/ne_direct_link.go rename to src/modules/network_element/fetch_link/ne_config.go index 7d5afaf0..cb93a2b2 100644 --- a/src/modules/network_element/service/ne_direct_link.go +++ b/src/modules/network_element/fetch_link/ne_config.go @@ -1,50 +1,15 @@ -package service +package fetchlink import ( "encoding/json" "fmt" "strings" - "time" "be.ems/src/framework/logger" "be.ems/src/framework/utils/fetch" "be.ems/src/modules/network_element/model" ) -// NeState 获取网元端服务状态 -func NeState(neInfo model.NeInfo) (map[string]any, error) { - // 网元状态 - neUrl := fmt.Sprintf("http://%s:%d/api/rest/systemManagement/v1/elementType/%s/objectType/systemState", neInfo.IP, neInfo.Port, strings.ToLower(neInfo.NeType)) - resBytes, err := fetch.Get(neUrl, nil, 1000) - if err != nil { - logger.Warnf("NeState %s", err.Error()) - return nil, err - } - - // 序列化结果 - var resData map[string]any - err = json.Unmarshal(resBytes, &resData) - if err != nil { - logger.Warnf("NeState Unmarshal %s", err.Error()) - return nil, err - } - - return map[string]any{ - "neType": neInfo.NeType, - "neId": neInfo.NeId, - "neName": neInfo.NeName, - "neIP": neInfo.IP, - "refreshTime": time.Now().UnixMilli(), // 获取时间 - "version": resData["version"], - "capability": resData["capability"], - "sn": resData["serialNum"], - "expire": resData["expiryDate"], - "cpu": resData["cpuUsage"], - "mem": resData["memUsage"], - "disk": resData["diskSpace"], - }, nil -} - // NeConfigOMC 网元配置对端网管信息 func NeConfigOMC(neInfo model.NeInfo) (map[string]any, error) { // 网元配置对端网管信息 @@ -83,3 +48,23 @@ func NeConfigOMC(neInfo model.NeInfo) (map[string]any, error) { return resData, nil } + +// NeConfigInfo 网元配置信息 +func NeConfigInfo(neInfo model.NeInfo, name string) (map[string]any, error) { + // 网元配置对端网管信息 + neUrl := fmt.Sprintf("http://%s:%d/api/rest/systemManagement/v1/elementType/%s/objectType/config/%s", neInfo.IP, neInfo.Port, strings.ToLower(neInfo.NeType), name) + resBytes, err := fetch.Get(neUrl, nil, 1000) + if err != nil { + logger.Warnf("NeConfigInfo %s Get \"%s\"", err.Error(), neUrl) + return nil, err + } + + // 序列化结果 + var resData map[string]any + err = json.Unmarshal(resBytes, &resData) + if err != nil { + logger.Warnf("NeConfigInfo Unmarshal %s", err.Error()) + return nil, err + } + return resData, nil +} diff --git a/src/modules/network_element/fetch_link/ne_state.go b/src/modules/network_element/fetch_link/ne_state.go new file mode 100644 index 00000000..4ed27aa3 --- /dev/null +++ b/src/modules/network_element/fetch_link/ne_state.go @@ -0,0 +1,56 @@ +package fetchlink + +import ( + "encoding/json" + "fmt" + "strings" + "time" + + "be.ems/src/framework/logger" + "be.ems/src/framework/utils/fetch" + "be.ems/src/modules/network_element/model" +) + +// NeState 获取网元端服务状态 +func NeState(neInfo model.NeInfo) (map[string]any, error) { + // 网元状态 + neUrl := fmt.Sprintf("http://%s:%d/api/rest/systemManagement/v1/elementType/%s/objectType/systemState", neInfo.IP, neInfo.Port, strings.ToLower(neInfo.NeType)) + resBytes, err := fetch.Get(neUrl, nil, 1000) + if err != nil { + logger.Warnf("NeState %s", err.Error()) + return nil, err + } + + // 序列化结果 + var resData map[string]any + err = json.Unmarshal(resBytes, &resData) + if err != nil { + logger.Warnf("NeState Unmarshal %s", err.Error()) + return nil, err + } + + // 检查是否有许可时间 + if v, ok := resData["expiryDate"]; ok && v != nil { + expiryDate := v.(string) + // UPF存在2000的许可时间,MME会有空字符 + if strings.HasPrefix(expiryDate, "2000") || expiryDate == "" { + logger.Warnf("NeState %s License Expiration Aanomaly. Get \"%s\"", neInfo.NeType, neUrl) + return nil, fmt.Errorf("%s License Expiration Aanomaly", neInfo.NeType) + } + } + + return map[string]any{ + "neType": neInfo.NeType, + "neId": neInfo.NeId, + "neName": neInfo.NeName, + "neIP": neInfo.IP, + "refreshTime": time.Now().UnixMilli(), // 获取时间 + "version": resData["version"], + "capability": resData["capability"], + "sn": resData["serialNum"], + "expire": resData["expiryDate"], + "cpu": resData["cpuUsage"], + "mem": resData["memUsage"], + "disk": resData["diskSpace"], + }, nil +} diff --git a/src/modules/network_element/model/ne_config.go b/src/modules/network_element/model/ne_config.go new file mode 100644 index 00000000..dcc7e054 --- /dev/null +++ b/src/modules/network_element/model/ne_config.go @@ -0,0 +1,21 @@ +package model + +// NeConfig 网元参数配置可用属性值 +type NeConfig struct { + ID string `json:"id" gorm:"id"` + NeType string `json:"neType" binding:"required" gorm:"ne_type"` // 网元类型 + NeId string `json:"-" gorm:"ne_id"` + TopTag string `json:"topTag" binding:"required" gorm:"top_tag"` + TopDisplay string `json:"topDisplay" binding:"required" gorm:"top_display"` + Method string `json:"method" gorm:"method"` // 操作属性 get只读强制不可编辑删除 put可编辑 delete可删除 post可新增 + ParamJSONStr string `json:"-" gorm:"param_json"` // accesss属性控制:只读read-only/read/ro 读写read-write + + // ====== 非数据库字段属性 ====== + + ParamData map[string]any `json:"paramData,omitempty" binding:"required" gorm:"-"` // 与ParamJSONStr配合转换 +} + +// TableName 表名称 +func (*NeConfig) TableName() string { + return "param_config" +} diff --git a/src/modules/network_element/model/ne_software.go b/src/modules/network_element/model/ne_software.go index 3eaf9569..53a5321d 100644 --- a/src/modules/network_element/model/ne_software.go +++ b/src/modules/network_element/model/ne_software.go @@ -15,7 +15,6 @@ type NeSoftware struct { // ====== 非数据库字段属性 ====== - NeId string `json:"neId,omitempty" gorm:"-"` // 网元ID } // TableName 表名称 diff --git a/src/modules/network_element/network_element.go b/src/modules/network_element/network_element.go index e44c612a..e6a6c61d 100644 --- a/src/modules/network_element/network_element.go +++ b/src/modules/network_element/network_element.go @@ -4,7 +4,6 @@ import ( "be.ems/src/framework/logger" "be.ems/src/framework/middleware" "be.ems/src/framework/middleware/collectlogs" - "be.ems/src/framework/middleware/repeat" "be.ems/src/modules/network_element/controller" "be.ems/src/modules/network_element/service" @@ -258,111 +257,39 @@ func Setup(router *gin.Engine) { ) } - // UDM鉴权用户信息 - udmAuthGroup := neGroup.Group("/udm/auth") + // 网元参数配置 + neConfigGroup := neGroup.Group("/config") { - udmAuthGroup.PUT("/resetData/:neId", - repeat.RepeatSubmit(5), + neConfigGroup.GET("/list", middleware.PreAuthorize(nil), - collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmAuth", collectlogs.BUSINESS_TYPE_CLEAN)), - controller.NewUDMAuth.ResetData, + controller.NewNeConfig.List, ) - udmAuthGroup.GET("/list", + neConfigGroup.GET("/info/:id", middleware.PreAuthorize(nil), - controller.NewUDMAuth.List, + controller.NewNeConfig.Info, ) - udmAuthGroup.GET("/:neId/:imsi", + neConfigGroup.POST("", middleware.PreAuthorize(nil), - controller.NewUDMAuth.Info, + collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neConfig", collectlogs.BUSINESS_TYPE_INSERT)), + controller.NewNeConfig.Add, ) - udmAuthGroup.POST("/:neId", + neConfigGroup.PUT("", middleware.PreAuthorize(nil), - collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmAuth", collectlogs.BUSINESS_TYPE_INSERT)), - controller.NewUDMAuth.Add, + collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neConfig", collectlogs.BUSINESS_TYPE_UPDATE)), + controller.NewNeConfig.Edit, ) - udmAuthGroup.POST("/:neId/:num", + neConfigGroup.DELETE("/:ids", middleware.PreAuthorize(nil), - collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmAuth", collectlogs.BUSINESS_TYPE_INSERT)), - controller.NewUDMAuth.Adds, + collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neConfig", collectlogs.BUSINESS_TYPE_DELETE)), + controller.NewNeConfig.Remove, ) - udmAuthGroup.PUT("/:neId", + neConfigGroup.GET("/list/:neType", middleware.PreAuthorize(nil), - collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmAuth", collectlogs.BUSINESS_TYPE_UPDATE)), - controller.NewUDMAuth.Edit, + controller.NewNeConfig.ListByNeType, ) - udmAuthGroup.DELETE("/:neId/:imsi", + neConfigGroup.GET("/data", middleware.PreAuthorize(nil), - collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmAuth", collectlogs.BUSINESS_TYPE_DELETE)), - controller.NewUDMAuth.Remove, - ) - udmAuthGroup.DELETE("/:neId/:imsi/:num", - middleware.PreAuthorize(nil), - collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmAuth", collectlogs.BUSINESS_TYPE_DELETE)), - controller.NewUDMAuth.Removes, - ) - udmAuthGroup.POST("/export", - middleware.PreAuthorize(nil), - collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmAuth", collectlogs.BUSINESS_TYPE_EXPORT)), - controller.NewUDMAuth.Export, - ) - udmAuthGroup.POST("/import", - middleware.PreAuthorize(nil), - collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmAuth", collectlogs.BUSINESS_TYPE_IMPORT)), - controller.NewUDMAuth.Import, - ) - } - - // UDM签约用户信息 - udmSubGroup := neGroup.Group("/udm/sub") - { - udmSubGroup.PUT("/resetData/:neId", - repeat.RepeatSubmit(5), - middleware.PreAuthorize(nil), - collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmSub", collectlogs.BUSINESS_TYPE_CLEAN)), - controller.NewUDMSub.ResetData, - ) - udmSubGroup.GET("/list", - middleware.PreAuthorize(nil), - controller.NewUDMSub.List, - ) - udmSubGroup.GET("/:neId/:imsi", - middleware.PreAuthorize(nil), - controller.NewUDMSub.Info, - ) - udmSubGroup.POST("/:neId", - middleware.PreAuthorize(nil), - collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmSub", collectlogs.BUSINESS_TYPE_INSERT)), - controller.NewUDMSub.Add, - ) - udmSubGroup.POST("/:neId/:num", - middleware.PreAuthorize(nil), - collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmSub", collectlogs.BUSINESS_TYPE_INSERT)), - controller.NewUDMSub.Adds, - ) - udmSubGroup.PUT("/:neId", - middleware.PreAuthorize(nil), - collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmSub", collectlogs.BUSINESS_TYPE_UPDATE)), - controller.NewUDMSub.Edit, - ) - udmSubGroup.DELETE("/:neId/:imsi", - middleware.PreAuthorize(nil), - collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmSub", collectlogs.BUSINESS_TYPE_DELETE)), - controller.NewUDMSub.Remove, - ) - udmSubGroup.DELETE("/:neId/:imsi/:num", - middleware.PreAuthorize(nil), - collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmSub", collectlogs.BUSINESS_TYPE_DELETE)), - controller.NewUDMSub.Removes, - ) - udmSubGroup.POST("/export", - middleware.PreAuthorize(nil), - collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmSub", collectlogs.BUSINESS_TYPE_EXPORT)), - controller.NewUDMSub.Export, - ) - udmSubGroup.POST("/import", - middleware.PreAuthorize(nil), - collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmSub", collectlogs.BUSINESS_TYPE_IMPORT)), - controller.NewUDMSub.Import, + controller.NewNeConfig.Data, ) } } @@ -376,4 +303,7 @@ func InitLoad() { if para5GMap, err := service.NewNeInfoImpl.NeConfPara5GRead(); para5GMap != nil && err == nil { service.NewNeInfoImpl.NeConfPara5GWirte(para5GMap, nil) } + // 启动时,清除缓存-网元参数配置可用属性值 + service.NewNeConfigImpl.ClearNeCacheByNeType("*") + service.NewNeConfigImpl.RefreshByNeTypeAndNeID("*") } diff --git a/src/modules/network_element/repository/ne_config.go b/src/modules/network_element/repository/ne_config.go new file mode 100644 index 00000000..5f555b3e --- /dev/null +++ b/src/modules/network_element/repository/ne_config.go @@ -0,0 +1,24 @@ +package repository + +import "be.ems/src/modules/network_element/model" + +// INeConfig 网元参数配置可用属性值 数据层接口 +type INeConfig interface { + // SelectPage 根据条件分页查询字典类型 + SelectPage(query map[string]any) map[string]any + + // SelectList 根据实体查询 + SelectList(param model.NeConfig) []model.NeConfig + + // SelectByIds 通过ID查询 + SelectByIds(ids []string) []model.NeConfig + + // Insert 新增信息 + Insert(param model.NeConfig) string + + // Update 修改信息 + Update(param model.NeConfig) int64 + + // DeleteByIds 批量删除信息 + DeleteByIds(ids []string) int64 +} diff --git a/src/modules/network_element/repository/ne_config.impl.go b/src/modules/network_element/repository/ne_config.impl.go new file mode 100644 index 00000000..8ea0db53 --- /dev/null +++ b/src/modules/network_element/repository/ne_config.impl.go @@ -0,0 +1,254 @@ +package repository + +import ( + "strings" + + "be.ems/src/framework/datasource" + "be.ems/src/framework/logger" + "be.ems/src/framework/utils/parse" + "be.ems/src/framework/utils/repo" + "be.ems/src/modules/network_element/model" +) + +// NewNeConfigImpl 网元参数配置可用属性值 实例化数据层 +var NewNeConfigImpl = &NeConfigImpl{ + selectSql: `select + id, ne_type, ne_id, top_tag, top_display, method, param_json + from param_config`, + + resultMap: map[string]string{ + "id": "ID", + "ne_type": "NeType", + "ne_id": "NeId", + "top_tag": "TopTag", + "top_display": "TopDisplay", + "method": "Method", + "param_json": "ParamJSONStr", + }, +} + +// NeConfigImpl 网元参数配置可用属性值 数据层处理 +type NeConfigImpl struct { + // 查询视图对象SQL + selectSql string + // 结果字段与实体映射 + resultMap map[string]string +} + +// convertResultRows 将结果记录转实体结果组 +func (r *NeConfigImpl) convertResultRows(rows []map[string]any) []model.NeConfig { + arr := make([]model.NeConfig, 0) + for _, row := range rows { + item := model.NeConfig{} + for key, value := range row { + if keyMapper, ok := r.resultMap[key]; ok { + repo.SetFieldValue(&item, keyMapper, value) + } + } + arr = append(arr, item) + } + return arr +} + +// SelectPage 根据条件分页查询字典类型 +func (r *NeConfigImpl) SelectPage(query map[string]any) map[string]any { + // 查询条件拼接 + var conditions []string + var params []any + if v, ok := query["neType"]; ok && v != "" { + conditions = append(conditions, "ne_type = ?") + params = append(params, v) + } + if v, ok := query["topTag"]; ok && v != "" { + conditions = append(conditions, "top_tag = ?") + params = append(params, v) + } + + // 构建查询条件语句 + whereSql := "" + if len(conditions) > 0 { + whereSql += " where " + strings.Join(conditions, " and ") + } + + result := map[string]any{ + "total": 0, + "rows": []model.NeHost{}, + } + + // 查询数量 长度为0直接返回 + totalSql := "select count(id) as 'total' from param_config" + totalRows, err := datasource.RawDB("", totalSql+whereSql, params) + if err != nil { + logger.Errorf("total err => %v", err) + return result + } + total := parse.Number(totalRows[0]["total"]) + if total == 0 { + return result + } else { + result["total"] = total + } + + // 分页 + pageNum, pageSize := repo.PageNumSize(query["pageNum"], query["pageSize"]) + pageSql := " limit ?,? " + params = append(params, pageNum*pageSize) + params = append(params, pageSize) + + // 查询数据 + querySql := r.selectSql + whereSql + pageSql + results, err := datasource.RawDB("", querySql, params) + if err != nil { + logger.Errorf("query err => %v", err) + return result + } + + // 转换实体 + result["rows"] = r.convertResultRows(results) + return result +} + +// SelectList 根据实体查询 +func (r *NeConfigImpl) SelectList(param model.NeConfig) []model.NeConfig { + // 查询条件拼接 + var conditions []string + var params []any + if param.NeType != "" { + conditions = append(conditions, "ne_type = ?") + params = append(params, param.NeType) + } + if param.TopTag != "" { + conditions = append(conditions, "top_tag = ?") + params = append(params, param.TopTag) + } + + // 构建查询条件语句 + whereSql := "" + if len(conditions) > 0 { + whereSql += " where " + strings.Join(conditions, " and ") + } + + // 查询数据 + querySql := r.selectSql + whereSql + " order by id asc " + results, err := datasource.RawDB("", querySql, params) + if err != nil { + logger.Errorf("query err => %v", err) + } + + // 转换实体 + return r.convertResultRows(results) +} + +// SelectByIds 通过ID查询 +func (r *NeConfigImpl) SelectByIds(ids []string) []model.NeConfig { + placeholder := repo.KeyPlaceholderByQuery(len(ids)) + querySql := r.selectSql + " where id in (" + placeholder + ")" + parameters := repo.ConvertIdsSlice(ids) + results, err := datasource.RawDB("", querySql, parameters) + if err != nil { + logger.Errorf("query err => %v", err) + return []model.NeConfig{} + } + // 转换实体 + return r.convertResultRows(results) +} + +// Insert 新增信息 +func (r *NeConfigImpl) Insert(param model.NeConfig) string { + // 参数拼接 + params := make(map[string]any) + if param.NeType != "" { + params["ne_type"] = param.NeType + } + if param.NeId != "" { + params["ne_id"] = param.NeId + } + if param.TopTag != "" { + params["top_tag"] = param.TopTag + } + if param.TopDisplay != "" { + params["top_display"] = param.TopDisplay + } + if param.Method != "" { + params["method"] = param.Method + } + if param.ParamJSONStr != "" { + params["param_json"] = param.ParamJSONStr + } + + // 构建执行语句 + keys, placeholder, values := repo.KeyPlaceholderValueByInsert(params) + sql := "insert into param_config (" + strings.Join(keys, ",") + ")values(" + placeholder + ")" + + db := datasource.DefaultDB() + // 开启事务 + tx := db.Begin() + // 执行插入 + err := tx.Exec(sql, values...).Error + if err != nil { + logger.Errorf("insert row : %v", err.Error()) + tx.Rollback() + return "" + } + // 获取生成的自增 ID + var insertedID string + err = tx.Raw("select last_insert_id()").Row().Scan(&insertedID) + if err != nil { + logger.Errorf("insert last id : %v", err.Error()) + tx.Rollback() + return "" + } + // 提交事务 + tx.Commit() + return insertedID +} + +// Update 修改信息 +func (r *NeConfigImpl) Update(param model.NeConfig) int64 { + // 参数拼接 + params := make(map[string]any) + if param.NeType != "" { + params["ne_type"] = param.NeType + } + if param.NeId != "" { + params["ne_id"] = param.NeId + } + if param.TopTag != "" { + params["top_tag"] = param.TopTag + } + if param.TopDisplay != "" { + params["top_display"] = param.TopDisplay + } + if param.Method != "" { + params["method"] = param.Method + } + if param.ParamJSONStr != "" { + params["param_json"] = param.ParamJSONStr + } + + // 构建执行语句 + keys, values := repo.KeyValueByUpdate(params) + sql := "update param_config set " + strings.Join(keys, ",") + " where id = ?" + + // 执行更新 + values = append(values, param.ID) + rows, err := datasource.ExecDB("", sql, values) + if err != nil { + logger.Errorf("update row : %v", err.Error()) + return 0 + } + return rows +} + +// DeleteByIds 批量删除信息 +func (r *NeConfigImpl) DeleteByIds(ids []string) int64 { + placeholder := repo.KeyPlaceholderByQuery(len(ids)) + sql := "delete from param_config where id in (" + placeholder + ")" + parameters := repo.ConvertIdsSlice(ids) + results, err := datasource.ExecDB("", sql, parameters) + if err != nil { + logger.Errorf("delete err => %v", err) + return 0 + } + return results +} diff --git a/src/modules/network_element/repository/udm_auth.go b/src/modules/network_element/repository/udm_auth.go deleted file mode 100644 index 2d1d58de..00000000 --- a/src/modules/network_element/repository/udm_auth.go +++ /dev/null @@ -1,26 +0,0 @@ -package repository - -import ( - "be.ems/src/modules/network_element/model" -) - -// UDM鉴权信息 数据层接口 -type IUDMAuth interface { - // ClearAndInsert 清空ne_id后新增实体 - ClearAndInsert(neID string, authArr []model.UDMAuth) int64 - - // SelectPage 根据条件分页查询 - SelectPage(query map[string]any) map[string]any - - // SelectList 根据实体查询 - SelectList(auth model.UDMAuth) []model.UDMAuth - - // Insert 批量添加 - Inserts(authUsers []model.UDMAuth) int64 - - // Delete 删除实体 - Delete(neID, imsi string) int64 - - // DeletePrefixImsi 删除前缀匹配的实体 - DeletePrefixImsi(neID, imsi string) int64 -} diff --git a/src/modules/network_element/repository/udm_sub.go b/src/modules/network_element/repository/udm_sub.go deleted file mode 100644 index 970639ea..00000000 --- a/src/modules/network_element/repository/udm_sub.go +++ /dev/null @@ -1,35 +0,0 @@ -package repository - -import ( - "be.ems/src/modules/network_element/model" -) - -// UDM签约信息 数据层接口 -type IUDMSub interface { - // ClearAndInsert 清空ne_id后新增实体 - ClearAndInsert(neID string, subArr []model.UDMSub) int64 - - // SelectPage 根据条件分页查询字典类型 - SelectPage(query map[string]any) map[string]any - - // SelectList 根据实体查询 - SelectList(subUser model.UDMSub) []model.UDMSub - - // Insert 新增实体 - Insert(subUser model.UDMSub) string - - // Insert 批量添加 - Inserts(subUser []model.UDMSub) int64 - - // Update 修改更新 - Update(neID string, subUser model.UDMSub) int64 - - // Delete 删除实体 - Delete(neID, imsi string) int64 - - // DeletePrefixImsi 删除前缀匹配的实体 - DeletePrefixImsi(neID, imsi string) int64 - - // Delete 删除范围实体 - Deletes(neID, imsi, num string) int64 -} diff --git a/src/modules/network_element/service/ne_config.go b/src/modules/network_element/service/ne_config.go new file mode 100644 index 00000000..fff9fe7b --- /dev/null +++ b/src/modules/network_element/service/ne_config.go @@ -0,0 +1,33 @@ +package service + +import "be.ems/src/modules/network_element/model" + +// INeConfig 网元参数配置可用属性值 服务层接口 +type INeConfig interface { + // RefreshByNeType 通过ne_type刷新redis中的缓存 + RefreshByNeTypeAndNeID(neType string) []model.NeConfig + + // ClearNeCacheByNeType 清除网元类型参数配置缓存 + ClearNeCacheByNeType(neType string) bool + + // SelectNeConfigByNeType 查询网元类型参数配置 + SelectNeConfigByNeType(neType string) []model.NeConfig + + // SelectNeHostPage 分页查询列表数据 + SelectPage(query map[string]any) map[string]any + + // SelectList 根据实体查询 + SelectList(param model.NeConfig) []model.NeConfig + + // SelectByIds 通过ID查询 + SelectById(id string) model.NeConfig + + // Insert 新增信息 + Insert(param model.NeConfig) string + + // Update 修改信息 + Update(param model.NeConfig) int64 + + // DeleteByIds 批量删除信息 + DeleteByIds(ids []string) (int64, error) +} diff --git a/src/modules/network_element/service/ne_config.impl.go b/src/modules/network_element/service/ne_config.impl.go new file mode 100644 index 00000000..6b4a4b82 --- /dev/null +++ b/src/modules/network_element/service/ne_config.impl.go @@ -0,0 +1,151 @@ +package service + +import ( + "encoding/json" + "fmt" + "strings" + + "be.ems/src/framework/constants/cachekey" + "be.ems/src/framework/redis" + "be.ems/src/modules/network_element/model" + "be.ems/src/modules/network_element/repository" +) + +// NewNeConfigImpl 网元参数配置可用属性值 实例化服务层 +var NewNeConfigImpl = &NeConfigImpl{ + neConfigRepository: repository.NewNeConfigImpl, +} + +// NeConfigImpl 网元参数配置可用属性值 服务层处理 +type NeConfigImpl struct { + // 网元参数配置可用属性值表 + neConfigRepository repository.INeConfig +} + +// RefreshByNeType 通过ne_type刷新redis中的缓存 +func (r *NeConfigImpl) RefreshByNeTypeAndNeID(neType string) []model.NeConfig { + // 多个 + if neType == "" || neType == "*" { + neConfigList := r.neConfigRepository.SelectList(model.NeConfig{}) + if len(neConfigList) > 0 { + neConfigGroup := map[string][]model.NeConfig{} + for _, v := range neConfigList { + if item, ok := neConfigGroup[v.NeType]; ok { + neConfigGroup[v.NeType] = append(item, v) + } else { + neConfigGroup[v.NeType] = []model.NeConfig{v} + } + } + for k, v := range neConfigGroup { + key := fmt.Sprintf("%sparam_config:%s", cachekey.NE_DATA_KEY, strings.ToUpper(k)) + redis.Del("", key) + if len(v) > 0 { + for i, item := range v { + if err := json.Unmarshal([]byte(item.ParamJSONStr), &item.ParamData); err != nil { + continue + } + v[i] = item + } + values, _ := json.Marshal(v) + redis.Set("", key, string(values)) + } + } + } + return neConfigList + } + // 单个 + key := fmt.Sprintf("%sparam_config:%s", cachekey.NE_DATA_KEY, strings.ToUpper(neType)) + redis.Del("", key) + neConfigList := r.neConfigRepository.SelectList(model.NeConfig{ + NeType: neType, + }) + if len(neConfigList) > 0 { + for i, v := range neConfigList { + if err := json.Unmarshal([]byte(v.ParamJSONStr), &v.ParamData); err != nil { + continue + } + neConfigList[i] = v + } + values, _ := json.Marshal(neConfigList) + redis.Set("", key, string(values)) + } + return neConfigList +} + +// ClearNeCacheByNeType 清除网元类型参数配置缓存 +func (r *NeConfigImpl) ClearNeCacheByNeType(neType string) bool { + key := fmt.Sprintf("%sparam_config:%s", cachekey.NE_DATA_KEY, neType) + if neType == "*" { + key = fmt.Sprintf("%sparam_config:*", cachekey.NE_DATA_KEY) + } + keys, err := redis.GetKeys("", key) + if err != nil { + return false + } + delOk, _ := redis.DelKeys("", keys) + return delOk +} + +// SelectNeConfigByNeType 查询网元类型参数配置 +func (r *NeConfigImpl) SelectNeConfigByNeType(neType string) []model.NeConfig { + var neConfigList []model.NeConfig + key := fmt.Sprintf("%sparam_config:%s", cachekey.NE_DATA_KEY, strings.ToUpper(neType)) + jsonStr, _ := redis.Get("", key) + if len(jsonStr) > 7 { + err := json.Unmarshal([]byte(jsonStr), &neConfigList) + if err != nil { + neConfigList = []model.NeConfig{} + } + } else { + neConfigList = r.RefreshByNeTypeAndNeID(neType) + } + return neConfigList +} + +// SelectNeHostPage 分页查询列表数据 +func (r *NeConfigImpl) SelectPage(query map[string]any) map[string]any { + return r.neConfigRepository.SelectPage(query) +} + +// SelectConfigList 查询列表 +func (r *NeConfigImpl) SelectList(param model.NeConfig) []model.NeConfig { + return r.neConfigRepository.SelectList(param) +} + +// SelectByIds 通过ID查询 +func (r *NeConfigImpl) SelectById(id string) model.NeConfig { + if id == "" { + return model.NeConfig{} + } + neHosts := r.neConfigRepository.SelectByIds([]string{id}) + if len(neHosts) > 0 { + return neHosts[0] + } + return model.NeConfig{} +} + +// Insert 新增信息 +func (r *NeConfigImpl) Insert(param model.NeConfig) string { + return r.neConfigRepository.Insert(param) +} + +// Update 修改信息 +func (r *NeConfigImpl) Update(param model.NeConfig) int64 { + return r.neConfigRepository.Update(param) +} + +// DeleteByIds 批量删除信息 +func (r *NeConfigImpl) DeleteByIds(ids []string) (int64, error) { + // 检查是否存在 + data := r.neConfigRepository.SelectByIds(ids) + if len(data) <= 0 { + return 0, fmt.Errorf("param.noData") + } + + if len(data) == len(ids) { + rows := r.neConfigRepository.DeleteByIds(ids) + return rows, nil + } + // 删除信息失败! + return 0, fmt.Errorf("delete fail") +} diff --git a/src/modules/network_element/service/ne_info.go b/src/modules/network_element/service/ne_info.go index 5945fb3e..b3e9838c 100644 --- a/src/modules/network_element/service/ne_info.go +++ b/src/modules/network_element/service/ne_info.go @@ -2,6 +2,7 @@ package service import ( "be.ems/src/framework/utils/ssh" + "be.ems/src/framework/utils/telnet" "be.ems/src/modules/network_element/model" ) @@ -47,11 +48,15 @@ type INeInfo interface { // CheckUniqueNeTypeAndNeId 校验同类型下标识是否唯一 CheckUniqueNeTypeAndNeId(neType, neId, id string) bool - // NeRunSSHclient 网元主机的SSH客户端-为创建相关连接 - NeRunSSHclient(neType, neId string) (*ssh.ConnSSH, error) + // NeRunSSHClient 网元主机的SSH客户端-为创建相关连接,注意结束后 Close() + NeRunSSHClient(neType, neId string) (*ssh.ConnSSH, error) - // NeRunCMD 向网元发送cmd命令 - NeRunCMD(neType, neId, cmd string) (string, error) + // NeRunSSHCmd 网元主机的SSH客户端发送cmd命令 + NeRunSSHCmd(neType, neId, cmd string) (string, error) + + // NeRunTelnetClient 网元主机的Telnet客户端-为创建相关连接,注意结束后 Close() + // num 是网元主机telnet 1:4100 2:5200 + NeRunTelnetClient(neType, neId string, num int) (*telnet.ConnTelnet, error) // neConfOAMRead 网元OAM配置文件读取 NeConfOAMRead(neType, neId string) (map[string]any, error) diff --git a/src/modules/network_element/service/ne_info.impl.go b/src/modules/network_element/service/ne_info.impl.go index de5b6a8d..8909a85b 100644 --- a/src/modules/network_element/service/ne_info.impl.go +++ b/src/modules/network_element/service/ne_info.impl.go @@ -13,6 +13,8 @@ import ( "be.ems/src/framework/redis" "be.ems/src/framework/utils/parse" "be.ems/src/framework/utils/ssh" + "be.ems/src/framework/utils/telnet" + neFetchlink "be.ems/src/modules/network_element/fetch_link" "be.ems/src/modules/network_element/model" "be.ems/src/modules/network_element/repository" ) @@ -148,7 +150,7 @@ func (r *NeInfoImpl) SelectList(ne model.NeInfo, bandStatus bool, bandHost bool) func (r *NeInfoImpl) bandNeStatus(arr *[]model.NeInfo) { for i := range *arr { v := (*arr)[i] - result, err := NeState(v) + result, err := neFetchlink.NeState(v) if err != nil { (*arr)[i].ServerState = map[string]any{ "online": false, @@ -166,7 +168,7 @@ func (r *NeInfoImpl) bandNeStatus(arr *[]model.NeInfo) { // 网元状态设置为在线 if v.Status != "1" { // 下发网管配置信息给网元 - _, err = NeConfigOMC(v) + _, err = neFetchlink.NeConfigOMC(v) if err == nil { v.Status = "1" } else { @@ -298,26 +300,26 @@ func (r *NeInfoImpl) CheckUniqueNeTypeAndNeId(neType, neId, id string) bool { return uniqueId == "" } -// NeRunSSHclient 网元主机的SSH客户端-为创建相关连接 -func (r *NeInfoImpl) NeRunSSHclient(neType, neId string) (*ssh.ConnSSH, error) { +// NeRunSSHClient 网元主机的SSH客户端-为创建相关连接,注意结束后 Close() +func (r *NeInfoImpl) NeRunSSHClient(neType, neId string) (*ssh.ConnSSH, error) { neInfo := r.SelectNeInfoByNeTypeAndNeID(neType, neId) if neInfo.NeId != neId { - logger.Errorf("NeRunSSHclient NeType:%s NeID:%s not found", neType, neId) + logger.Errorf("NeRunSSHClient NeType:%s NeID:%s not found", neType, neId) return nil, fmt.Errorf("neinfo not found") } // 取主机信息 if neInfo.HostIDs == "" { - logger.Errorf("NeRunSSHclient NeType:%s NeID:%s hostId not found", neType, neId) + logger.Errorf("NeRunSSHClient NeType:%s NeID:%s hostId not found", neType, neId) return nil, fmt.Errorf("neinfo hostId not found") } neInfo.Hosts = NewNeHostImpl.neHostRepository.SelectByIds(strings.Split(neInfo.HostIDs, ",")) if len(neInfo.Hosts) <= 0 { - logger.Errorf("NeRunSSHclient Hosts %s not found", neInfo.HostIDs) + logger.Errorf("NeRunSSHClient Hosts %s not found", neInfo.HostIDs) return nil, fmt.Errorf("neinfo host not found") } - neHost := neInfo.Hosts[0] + neHost := neInfo.Hosts[0] // 网元主机ssh 0:22 if neHost.HostType != "ssh" { - logger.Errorf("NeRunSSHclient Hosts first HostType %s not ssh", neHost.HostType) + logger.Errorf("NeRunSSHClient Hosts first HostType %s not ssh", neHost.HostType) return nil, fmt.Errorf("neinfo host type not ssh") } @@ -331,15 +333,15 @@ func (r *NeInfoImpl) NeRunSSHclient(neType, neId string) (*ssh.ConnSSH, error) { client, err = connSSH.NewClient() } if err != nil { - logger.Errorf("NeRunSSHclient NewClient err => %s", err.Error()) + logger.Errorf("NeRunSSHClient NewClient err => %s", err.Error()) return nil, fmt.Errorf("neinfo ssh client new err") } return client, nil } -// NeRunCMD 向网元发送cmd命令 -func (r *NeInfoImpl) NeRunCMD(neType, neId, cmd string) (string, error) { - sshClient, err := r.NeRunSSHclient(neType, neId) +// NeRunSSHCmd 网元主机的SSH客户端发送cmd命令 +func (r *NeInfoImpl) NeRunSSHCmd(neType, neId, cmd string) (string, error) { + sshClient, err := r.NeRunSSHClient(neType, neId) if err != nil { return "", err } @@ -348,12 +350,43 @@ func (r *NeInfoImpl) NeRunCMD(neType, neId, cmd string) (string, error) { // 执行命令 output, err := sshClient.RunCMD(cmd) if err != nil { - logger.Errorf("NeRunCMD RunCMD %s err => %s", output, err.Error()) + logger.Errorf("NeRunSSHCmd RunCMD %s err => %s", output, err.Error()) return "", fmt.Errorf("neinfo ssh run cmd err") } return output, nil } +// NeRunTelnetClient 网元主机的Telnet客户端-为创建相关连接,注意结束后 Close() +// num 是网元主机telnet 1:4100 2:5200 +func (r *NeInfoImpl) NeRunTelnetClient(neType, neId string, num int) (*telnet.ConnTelnet, error) { + neInfo := r.SelectNeInfoByNeTypeAndNeID(neType, neId) + if neInfo.NeId != neId { + logger.Errorf("NeRunTelnetClient NeType:%s NeID:%s not found", neType, neId) + return nil, fmt.Errorf("neinfo not found") + } + // 取主机信息 + if neInfo.HostIDs == "" { + logger.Errorf("NeRunTelnetClient NeType:%s NeID:%s hostId not found", neType, neId) + return nil, fmt.Errorf("neinfo hostId not found") + } + neInfo.Hosts = NewNeHostImpl.neHostRepository.SelectByIds(strings.Split(neInfo.HostIDs, ",")) + if len(neInfo.Hosts) <= 0 { + logger.Errorf("NeRunTelnetClient Hosts %s not found", neInfo.HostIDs) + return nil, fmt.Errorf("neinfo host not found") + } + neHost := neInfo.Hosts[num] + + // 创建链接Telnet客户端 + var connTelnet telnet.ConnTelnet + neHost.CopyTo(&connTelnet) + telnetClient, err := connTelnet.NewClient() + if err != nil { + logger.Errorf("NeRunTelnetClient NewClient err => %s", err.Error()) + return nil, fmt.Errorf("neinfo telnet client new err") + } + return telnetClient, nil +} + // neConfOAMData 网元OAM配置文件默认格式数据 func (r *NeInfoImpl) neConfOAMData() map[string]any { return map[string]any{ @@ -447,7 +480,7 @@ func (r *NeInfoImpl) neConfOAMWirte(neType, neId string, content any, sync bool) // 同步到网元端 if sync { // 网元主机的SSH客户端 - sshClient, err := r.NeRunSSHclient(neType, neId) + sshClient, err := r.NeRunSSHClient(neType, neId) if err != nil { return err } @@ -609,7 +642,7 @@ func (r *NeInfoImpl) NeConfPara5GWirte(content map[string]any, syncNE []string) for _, neTI := range syncNE { ti := strings.SplitN(neTI, "@", 2) // 网元主机的SSH客户端 - sshClient, err := r.NeRunSSHclient(ti[0], ti[1]) + sshClient, err := r.NeRunSSHClient(ti[0], ti[1]) if err != nil { errMsg = append(errMsg, fmt.Sprintf("%s : %s", ti, err.Error())) continue diff --git a/src/modules/network_element/service/ne_license.impl.go b/src/modules/network_element/service/ne_license.impl.go index d6f684ee..9d11804d 100644 --- a/src/modules/network_element/service/ne_license.impl.go +++ b/src/modules/network_element/service/ne_license.impl.go @@ -110,7 +110,7 @@ func (r *NeLicenseImpl) ReadLicenseInfo(neLicense model.NeLicense) (string, stri nePath := fmt.Sprintf("/usr/local/etc/%s/license", neTypeLower) // 网元主机的SSH客户端 - sshClient, err := NewNeInfoImpl.NeRunSSHclient(neLicense.NeType, neLicense.NeId) + sshClient, err := NewNeInfoImpl.NeRunSSHClient(neLicense.NeType, neLicense.NeId) if err != nil { return "", "" } @@ -149,7 +149,7 @@ func (r *NeLicenseImpl) UploadLicense(neLicense model.NeLicense) error { } // 网元主机的SSH客户端 - sshClient, err := NewNeInfoImpl.NeRunSSHclient(neLicense.NeType, neLicense.NeId) + sshClient, err := NewNeInfoImpl.NeRunSSHClient(neLicense.NeType, neLicense.NeId) if err != nil { return err } @@ -174,16 +174,16 @@ func (r *NeLicenseImpl) UploadLicense(neLicense model.NeLicense) error { // 上传授权文件去覆盖 if err := sftpClient.CopyFileLocalToRemote(omcLicensePath, neLicensePath); err != nil { - return err + return fmt.Errorf("please check if scp remote copy is allowed") } // 重启服务 if neLicense.Reload { cmdStr := fmt.Sprintf("sudo service %s restart", neTypeLower) if neTypeLower == "ims" { - cmdStr = "sudo ims-stop || true && sudo ims-start" + cmdStr = "ims-stop || true && ims-start" } else if neTypeLower == "omc" { - cmdStr = "sudo /usr/local/omc/bin/omcsvc.sh restart" + cmdStr = "sudo systemctl restart restagent" } sshClient.RunCMD(cmdStr) } diff --git a/src/modules/network_element/service/ne_version.impl.go b/src/modules/network_element/service/ne_version.impl.go index 473f109a..d17f475b 100644 --- a/src/modules/network_element/service/ne_version.impl.go +++ b/src/modules/network_element/service/ne_version.impl.go @@ -89,7 +89,7 @@ func (r *NeVersionImpl) SelectByNeTypeAndNeID(neType, neId string) model.NeVersi // action 安装行为:install upgrade rollback func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinput map[string]string) (string, error) { // 网元主机的SSH客户端 - sshClient, err := NewNeInfoImpl.NeRunSSHclient(neVersion.NeType, neVersion.NeId) + sshClient, err := NewNeInfoImpl.NeRunSSHClient(neVersion.NeType, neVersion.NeId) if err != nil { return "", err } @@ -125,10 +125,6 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp if err != nil { return "", err } - // 操作自己omc时 - if neVersion.NeType == "OMC" { - return sshClient.RunCMD(fmt.Sprintf("nohup sh -c \"sleep 3s && %s\" > /dev/null 2>&1 & \n", strings.Join(cmdStrArr, " && "))) - } // ========= 执行阶段 ========= commandLine, err := r.operateRun(sshClient, preinput, cmdStrArr, neVersion.NeType, okFlagStr) @@ -203,23 +199,30 @@ func (r *NeVersionImpl) operateCommand(action, neType string, neFilePaths []stri // 组合命令输入 cmdStrArr := []string{} if neType == "OMC" { - cmdStrArr = append(cmdStrArr, pkgCmdStr) + omcStrArr := []string{} + omcStrArr = append(omcStrArr, pkgCmdStr) if action == "install" { - cmdStrArr = append(cmdStrArr, "sudo /usr/local/omc/bin/setomc.sh -m install") // 初始化数据库 + omcStrArr = append(omcStrArr, "sudo /usr/local/omc/bin/setomc.sh -m install") // 初始化数据库 } else { - cmdStrArr = append(cmdStrArr, "sudo /usr/local/omc/bin/omcsvc.sh stop") - cmdStrArr = append(cmdStrArr, "sudo /usr/local/omc/bin/setomc.sh -m upgrade") // 升级数据库 + omcStrArr = append(omcStrArr, "sudo /usr/local/omc/bin/setomc.sh -m upgrade") // 升级数据库 } - cmdStrArr = append(cmdStrArr, "sudo /usr/local/omc/bin/omcsvc.sh restart") + omcStrArr = append(omcStrArr, "sudo systemctl restart restagent") // 重启服务 + omcStrArr = append(omcStrArr, fmt.Sprintf("sudo rm %s", strings.Join(neFilePaths, " "))) // 删除软件包 + + // 2s后安装 + cmdStrArr = append(cmdStrArr, fmt.Sprintf("nohup sh -c \"sleep 2s && %s\" > /dev/null 2>&1 & \n", strings.Join(omcStrArr, " && "))) + // 结束 + cmdStrArr = append(cmdStrArr, fmt.Sprintf("echo '%s' \n", okFlagStr)) + return okFlagStr, cmdStrArr, nil } else if neType == "IMS" { if action == "install" { para5GData := NewNeInfoImpl.Para5GData cmdStrArr = append(cmdStrArr, pkgCmdStr+" \n") // 公网 PLMN地址 - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo /usr/local/etc/ims/default/tools/modipplmn.sh %s %s %s \n", para5GData["SIP_IP"], para5GData["MCC"], para5GData["MNC"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("/usr/local/etc/ims/default/tools/modipplmn.sh %s %s %s \n", para5GData["SIP_IP"], para5GData["MCC"], para5GData["MNC"])) // 内网 服务地址 - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo /usr/local/etc/ims/default/tools/modintraip.sh %s \n", para5GData["IMS_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("/usr/local/etc/ims/default/tools/modintraip.sh %s \n", para5GData["IMS_IP"])) // IWF连接PCF服务 cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.160/%s/g\" /usr/local/etc/iwf/iwf_conf.yaml \n", para5GData["PCF_IP"])) // 设置 HOST @@ -247,14 +250,15 @@ func (r *NeVersionImpl) operateCommand(action, neType string, neFilePaths []stri // adb cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/adb/default/adb.conf /usr/local/etc/adb/adb.conf \n") cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/bind 127.0.0.1/bind %s/g\" /usr/local/etc/adb/adb.conf \n", para5GData["ADB_IP"])) + cmdStrArr = append(cmdStrArr, "sudo service adb restart \n") - cmdStrArr = append(cmdStrArr, "sudo ims-stop || true && sudo ims-start \n") + cmdStrArr = append(cmdStrArr, "ims-stop || true && ims-start \n") // 30s后停止服务 // cmdStrArr = append(cmdStrArr, "nohup sh -c \"sleep 30s && sudo ims-stop\" > /dev/null 2>&1 & \n") } else { - cmdStrArr = append(cmdStrArr, "sudo ims-stop \n") + cmdStrArr = append(cmdStrArr, "ims-stop \n") cmdStrArr = append(cmdStrArr, pkgCmdStr+" \n") - cmdStrArr = append(cmdStrArr, "sudo ims-start \n") + cmdStrArr = append(cmdStrArr, "ims-start \n") } } else { if action == "install" { @@ -319,11 +323,12 @@ func (r *NeVersionImpl) operateCommand(action, neType string, neFilePaths []stri cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/serviceSelection: 'ims'/serviceSelection: '%s'/g\" /usr/local/etc/udm/epsApn.yaml \n", para5GData["DNN_IMS"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/dnn: internet/dnn: %s/g\" /usr/local/etc/udm/dnn.yaml \n", para5GData["DNN_DATA"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/dnn: ims/dnn: %s/g\" /usr/local/etc/udm/dnn.yaml \n", para5GData["DNN_IMS"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.18.81/%s/g\" /usr/local/etc/udm/as.yaml \n", para5GData["SIP_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.8.110/%s/g\" /usr/local/etc/udm/as.yaml \n", para5GData["SIP_IP"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s udm' /etc/hosts || echo '%s udm' | sudo tee -a /etc/hosts \n", para5GData["UDM_IP"], para5GData["UDM_IP"])) // adb cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/adb/default/adb.conf /usr/local/etc/adb/adb.conf \n") cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/bind 127.0.0.1/bind %s/g\" /usr/local/etc/adb/adb.conf \n", para5GData["ADB_IP"])) + cmdStrArr = append(cmdStrArr, "sudo service adb restart \n") } // SMF配置修改 if neTypeLower == "smf" { @@ -431,12 +436,16 @@ func (r *NeVersionImpl) operateCommand(action, neType string, neFilePaths []stri cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.150/%s/g\" /usr/local/etc/mme/mme.conf \n", para5GData["SMF_IP"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s|192.168.8.220/20|%s|g\" /usr/local/etc/mme/mme.conf \n", para5GData["S1_MMEIP"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s|172.16.5.220/24|%s|g\" /usr/local/etc/mme/mme.conf \n", para5GData["S11_MMEIP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s|172.16.5.220|%s|g\" /usr/local/etc/mme/mme.conf \n", para5GData["MME_IP"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s|172.16.5.221/24|%s|g\" /usr/local/etc/mme/mme.conf \n", para5GData["S10_MMEIP"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc001.mcc001/mnc%s.mcc%s/g\" /usr/local/etc/mme/mme.conf \n", para5GData["MNC_DOMAIN"], para5GData["MCC"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/\"00101\"/\"%s%s\"/g\" /usr/local/etc/mme/mme.conf \n", para5GData["MCC"], para5GData["MNC"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/MCC=\"001\" ; MNC=\"01\";/MCC=\"%s\" ; MNC=\"%s\";/g\" /usr/local/etc/mme/mme.conf \n", para5GData["MCC"], para5GData["MNC"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/TAC = \"1\";/TAC = \"%s\";/g\" /usr/local/etc/mme/mme.conf \n", para5GData["TAC"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/TAC = 1;/TAC = %s;/g\" /usr/local/etc/mme/mme.conf \n", para5GData["TAC"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i 's/MCC=\"001\"/MCC=\"%s\"/g' /usr/local/etc/mme/mme.conf \n", para5GData["MCC"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i 's/MCC = \"001\"/MCC = \"%s\"/g' /usr/local/etc/mme/mme.conf \n", para5GData["MCC"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i 's/MNC=\"01\";/MNC=\"%s\";/g' /usr/local/etc/mme/mme.conf \n", para5GData["MNC"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i 's/MNC = \"01\";/MNC = \"%s\";/g' /usr/local/etc/mme/mme.conf \n", para5GData["MNC"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i 's/TAC = \"1\";/TAC = \"%s\";/g' /usr/local/etc/mme/mme.conf \n", para5GData["TAC"])) + 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") cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s mme' /etc/hosts || echo '%s mme' | sudo tee -a /etc/hosts \n", para5GData["S11_MMEIP"], para5GData["S11_MMEIP"])) diff --git a/src/modules/network_element/service/udm_auth.go b/src/modules/network_element/service/udm_auth.go deleted file mode 100644 index 4ed51082..00000000 --- a/src/modules/network_element/service/udm_auth.go +++ /dev/null @@ -1,37 +0,0 @@ -package service - -import "be.ems/src/modules/network_element/model" - -// UDM鉴权信息 服务层接口 -type IUDMAuth interface { - // Save UDM鉴权用户-获取redis全部保存数据库 - Save(neID string) int64 - - // Page UDM鉴权用户-分页查询数据库 - Page(query map[string]any) map[string]any - - // List UDM鉴权用户-查询数据库 - List(authUser model.UDMAuth) []model.UDMAuth - - // Insert UDM鉴权用户-新增单个 - // imsi长度15,ki长度32,opc长度0或者32 - Insert(neID string, authUser model.UDMAuth) int64 - - // Insert UDM鉴权用户-批量添加 - Inserts(neID string, authUser model.UDMAuth, num string) int64 - - // InsertCSV UDM鉴权用户-批量添加 - InsertCSV(neID string, data []map[string]string) int64 - - // InsertTxt UDM鉴权用户-批量添加 - InsertTxt(neID string, data [][]string) int64 - - // Insert UDM鉴权用户-修改更新 - Update(neID string, authUser model.UDMAuth) int64 - - // Insert UDM鉴权用户-删除单个 - Delete(neID, imsi string) int64 - - // Insert UDM鉴权用户-删除范围 - Deletes(neID, imsi, num string) int64 -} diff --git a/src/modules/network_element/service/udm_auth.impl.go b/src/modules/network_element/service/udm_auth.impl.go deleted file mode 100644 index a3c9689a..00000000 --- a/src/modules/network_element/service/udm_auth.impl.go +++ /dev/null @@ -1,179 +0,0 @@ -package service - -import ( - "fmt" - "strings" - - "be.ems/src/framework/redis" - "be.ems/src/modules/network_element/model" - "be.ems/src/modules/network_element/repository" -) - -// 实例化服务层 UDMAuthImpl 结构体 -var NewUDMAuthImpl = &UDMAuthImpl{ - udmAuthRepository: repository.NewUDMAuthImpl, -} - -// UDM鉴权信息 服务层处理 -type UDMAuthImpl struct { - // UDM鉴权信息数据信息 - udmAuthRepository repository.IUDMAuth -} - -// authDataByRedis UDM鉴权用户 -func (r *UDMAuthImpl) authDataByRedis(imsi, neID string) []model.UDMAuth { - arr := []model.UDMAuth{} - key := fmt.Sprintf("ausf:%s", imsi) - ausfArr, err := redis.GetKeys("udmuser", key) - if err != nil { - return arr - } - for _, key := range ausfArr { - m, err := redis.GetHash("udmuser", key) - if err != nil { - continue - } - - // 跳过-号数据 - imsi := key[5:] - if strings.Contains(imsi, "-") { - continue - } - - status := "1" // 默认给1 - - amf := "" - if v, ok := m["amf"]; ok { - amf = strings.Replace(v, "\r\n", "", 1) - } - a := model.UDMAuth{ - Imsi: imsi, - Amf: amf, - Status: status, - Ki: m["ki"], - AlgoIndex: m["algo"], - Opc: m["opc"], - NeID: neID, - } - arr = append(arr, a) - } - return arr -} - -// Save UDM鉴权用户-获取redis全部保存数据库 -func (r *UDMAuthImpl) Save(neID string) int64 { - authArr := r.authDataByRedis("*", neID) - // 数据清空后添加 - go r.udmAuthRepository.ClearAndInsert(neID, authArr) - return int64(len(authArr)) -} - -// Page UDM鉴权用户-分页查询数据库 -func (r *UDMAuthImpl) Page(query map[string]any) map[string]any { - return r.udmAuthRepository.SelectPage(query) -} - -// List UDM鉴权用户-查询数据库 -func (r *UDMAuthImpl) List(authUser model.UDMAuth) []model.UDMAuth { - return r.udmAuthRepository.SelectList(authUser) -} - -// Insert UDM鉴权用户-新增单个 -// imsi长度15,ki长度32,opc长度0或者32 -func (r *UDMAuthImpl) Insert(neID string, authUser model.UDMAuth) int64 { - authArr := r.authDataByRedis(authUser.Imsi, neID) - if len(authArr) > 0 { - r.udmAuthRepository.Delete(neID, authUser.Imsi) - r.udmAuthRepository.Inserts(authArr) - } - return 0 -} - -// Insert UDM鉴权用户-批量添加 -func (r *UDMAuthImpl) Inserts(neID string, authUser model.UDMAuth, num string) int64 { - startIMSI := authUser.Imsi - startIMSI = startIMSI[:len(startIMSI)-len(num)] + "*" - // keys udm-sd:4600001000004* - authArr := r.authDataByRedis(startIMSI, neID) - if len(authArr) > 0 { - for _, v := range authArr { - r.udmAuthRepository.Delete(neID, v.Imsi) - } - return r.udmAuthRepository.Inserts(authArr) - } - return 0 -} - -// InsertCSV UDM鉴权用户-批量添加 -func (r *UDMAuthImpl) InsertCSV(neID string, data []map[string]string) int64 { - prefixes := make(map[string]struct{}) - for _, v := range data { - imsi := v["imsi"] - if len(imsi) < 5 { - continue - } - prefix := imsi[:len(imsi)-4] - prefixes[prefix] = struct{}{} - } - // 分组插入 - var num int64 = 0 - for prefix := range prefixes { - r.udmAuthRepository.DeletePrefixImsi(neID, prefix) - subArr := r.authDataByRedis(prefix+"*", neID) - if len(subArr) > 0 { - num += r.udmAuthRepository.Inserts(subArr) - } - } - return num -} - -// InsertTxt UDM鉴权用户-批量添加 -func (r *UDMAuthImpl) InsertTxt(neID string, data [][]string) int64 { - prefixes := make(map[string]struct{}) - for _, v := range data { - imsi := v[0] - if len(imsi) < 5 { - continue - } - prefix := imsi[:len(imsi)-4] - prefixes[prefix] = struct{}{} - } - // 分组插入 - var num int64 = 0 - for prefix := range prefixes { - r.udmAuthRepository.DeletePrefixImsi(neID, prefix) - subArr := r.authDataByRedis(prefix+"*", neID) - if len(subArr) > 0 { - num += r.udmAuthRepository.Inserts(subArr) - } - } - return num -} - -// Insert UDM鉴权用户-修改更新 -func (r *UDMAuthImpl) Update(neID string, authUser model.UDMAuth) int64 { - authArr := r.authDataByRedis(authUser.Imsi, neID) - if len(authArr) > 0 { - r.udmAuthRepository.Delete(neID, authUser.Imsi) - return r.udmAuthRepository.Inserts(authArr) - } - return 0 -} - -// Insert UDM鉴权用户-删除单个 -func (r *UDMAuthImpl) Delete(neID, imsi string) int64 { - return r.udmAuthRepository.Delete(neID, imsi) -} - -// Insert UDM鉴权用户-删除范围 -func (r *UDMAuthImpl) Deletes(neID, imsi, num string) int64 { - prefix := imsi[:len(imsi)-len(num)-1] - // 直接删除前缀的记录 - r.udmAuthRepository.DeletePrefixImsi(neID, prefix) - // keys ausf:4600001000004* - authArr := r.authDataByRedis(prefix+"*", neID) - if len(authArr) > 0 { - return r.udmAuthRepository.Inserts(authArr) - } - return 0 -} diff --git a/src/modules/network_element/service/udm_sub.go b/src/modules/network_element/service/udm_sub.go deleted file mode 100644 index 14e5af54..00000000 --- a/src/modules/network_element/service/udm_sub.go +++ /dev/null @@ -1,37 +0,0 @@ -package service - -import "be.ems/src/modules/network_element/model" - -// UDM签约用户信息 服务层接口 -type IUDMSub interface { - // Save UDM签约用户-获取redis全部保存数据库 - Save(neID string) int64 - - // Page UDM签约用户-分页查询数据库 - Page(query map[string]any) map[string]any - - // List UDM签约用户-查询数据库 - List(subUser model.UDMSub) []model.UDMSub - - // Insert UDM签约用户-新增单个 - // imsi长度15,ki长度32,opc长度0或者32 - Insert(neID string, subUser model.UDMSub) int64 - - // Insert UDM签约用户-批量添加 - Inserts(neID string, subUser model.UDMSub, num string) int64 - - // InsertCSV UDM签约用户-批量添加 - InsertCSV(neID string, data []map[string]string) int64 - - // InsertTxt UDM签约用户-批量添加 - InsertTxt(neID string, data [][]string) int64 - - // Insert UDM签约用户-修改更新 - Update(neID string, subUser model.UDMSub) int64 - - // Insert UDM签约用户-删除单个 - Delete(neID, imsi string) int64 - - // Insert UDM签约用户-删除范围 - Deletes(neID, imsi, num string) int64 -} diff --git a/src/modules/network_element/service/udm_sub.impl.go b/src/modules/network_element/service/udm_sub.impl.go deleted file mode 100644 index e0310716..00000000 --- a/src/modules/network_element/service/udm_sub.impl.go +++ /dev/null @@ -1,195 +0,0 @@ -package service - -import ( - "fmt" - "strings" - - "be.ems/src/framework/redis" - "be.ems/src/modules/network_element/model" - "be.ems/src/modules/network_element/repository" -) - -// 实例化服务层 UDMSubImpl 结构体 -var NewUDMSubImpl = &UDMSubImpl{ - udmSubRepository: repository.NewUDMSubImpl, -} - -// UDM签约信息 服务层处理 -type UDMSubImpl struct { - // UDM签约信息数据信息 - udmSubRepository repository.IUDMSub -} - -// subDataByRedis UDM签约用户 -func (r *UDMSubImpl) subDataByRedis(imsi, neID string) []model.UDMSub { - arr := []model.UDMSub{} - key := fmt.Sprintf("udm-sd:%s", imsi) - udmsdArr, err := redis.GetKeys("udmuser", key) - if err != nil { - return arr - } - for _, key := range udmsdArr { - m, err := redis.GetHash("udmuser", key) - if err != nil { - continue - } - - a := model.UDMSub{ - Imsi: key[7:], - Msisdn: m["gpsi"], // 46003550072 strings.TrimPrefix(m["gpsi"], "86"), - SmfSel: m["smf-sel"], - SmData: m["sm-dat"], // 1-000001&cmnet&ims&3gnet - NeID: neID, - } - - // def_ambr,def_nssai,0,def_arfb,def_sar,3,1,12000,1,1000,0,1,- - if v, ok := m["am-dat"]; ok { - arr := strings.Split(v, ",") - a.Ambr = arr[0] - a.Nssai = arr[1] - a.Rat = arr[2] - a.Arfb = arr[3] - a.Sar = arr[4] - a.Cn = arr[5] - } - // 1,64,24,65,def_eps,1,2,010200000000,- - if v, ok := m["eps-dat"]; ok { - arr := strings.Split(v, ",") - // 跳过非常规数据 - if len(arr) > 9 { - continue - } - a.EpsDat = v - a.EpsFlag = arr[0] - a.EpsOdb = arr[1] - a.HplmnOdb = arr[2] - a.Ard = arr[3] - a.Epstpl = arr[4] - a.ContextId = arr[5] - a.ApnContext = arr[7] - // [6] 是不要的,导入和导出不用 - a.StaticIp = arr[8] - } - - arr = append(arr, a) - } - return arr -} - -// Save UDM签约用户-获取redis全部保存数据库 -func (r *UDMSubImpl) Save(neID string) int64 { - subArr := r.subDataByRedis("*", neID) - // 数据清空后添加 - go r.udmSubRepository.ClearAndInsert(neID, subArr) - return int64(len(subArr)) -} - -// Page UDM签约用户-分页查询数据库 -func (r *UDMSubImpl) Page(query map[string]any) map[string]any { - return r.udmSubRepository.SelectPage(query) -} - -// List UDM签约用户-查询数据库 -func (r *UDMSubImpl) List(subUser model.UDMSub) []model.UDMSub { - return r.udmSubRepository.SelectList(subUser) -} - -// Insert UDM签约用户-新增单个 -// imsi长度15,ki长度32,opc长度0或者32 -func (r *UDMSubImpl) Insert(neID string, subUser model.UDMSub) int64 { - authArr := r.subDataByRedis(subUser.Imsi, neID) - if len(authArr) > 0 { - r.udmSubRepository.Delete(neID, subUser.Imsi) - r.udmSubRepository.Inserts(authArr) - } - return 0 -} - -// Insert UDM签约用户-批量添加 -func (r *UDMSubImpl) Inserts(neID string, subUser model.UDMSub, num string) int64 { - startIMSI := subUser.Imsi - startIMSI = startIMSI[:len(startIMSI)-len(num)] + "*" - // keys udm-sd:4600001000004* - subArr := r.subDataByRedis(startIMSI, neID) - if len(subArr) > 0 { - for _, v := range subArr { - r.udmSubRepository.Delete(neID, v.Imsi) - } - return r.udmSubRepository.Inserts(subArr) - } - return 0 -} - -// InsertCSV UDM签约用户-批量添加 -func (r *UDMSubImpl) InsertCSV(neID string, data []map[string]string) int64 { - prefixes := make(map[string]struct{}) - for _, v := range data { - imsi := v["imsi"] - if len(imsi) < 5 { - continue - } - prefix := imsi[:len(imsi)-4] - prefixes[prefix] = struct{}{} - } - // 分组插入 - var num int64 = 0 - for prefix := range prefixes { - r.udmSubRepository.DeletePrefixImsi(neID, prefix) - subArr := r.subDataByRedis(prefix+"*", neID) - if len(subArr) > 0 { - num += r.udmSubRepository.Inserts(subArr) - } - } - return num -} - -// InsertTxt UDM签约用户-批量添加 -func (r *UDMSubImpl) InsertTxt(neID string, data [][]string) int64 { - prefixes := make(map[string]struct{}) - for _, v := range data { - imsi := v[0] - if len(imsi) < 5 { - continue - } - prefix := imsi[:len(imsi)-4] - prefixes[prefix] = struct{}{} - } - // 分组插入 - var num int64 = 0 - for prefix := range prefixes { - r.udmSubRepository.DeletePrefixImsi(neID, prefix) - subArr := r.subDataByRedis(prefix+"*", neID) - if len(subArr) > 0 { - num += r.udmSubRepository.Inserts(subArr) - } - } - return num -} - -// Insert UDM签约用户-修改更新 -func (r *UDMSubImpl) Update(neID string, subUser model.UDMSub) int64 { - authArr := r.subDataByRedis(subUser.Imsi, neID) - if len(authArr) > 0 { - r.udmSubRepository.Delete(neID, subUser.Imsi) - return r.udmSubRepository.Inserts(authArr) - } - return 0 -} - -// Insert UDM签约用户-删除单个 -func (r *UDMSubImpl) Delete(neID, imsi string) int64 { - return r.udmSubRepository.Delete(neID, imsi) -} - -// Insert UDM签约用户-删除范围 -func (r *UDMSubImpl) Deletes(neID, imsi, num string) int64 { - prefix := imsi[:len(imsi)-len(num)-1] - // 直接删除前缀的记录 - r.udmSubRepository.DeletePrefixImsi(neID, prefix) - // keys udm-sd:4600001000004* - authArr := r.subDataByRedis(prefix+"*", neID) - if len(authArr) > 0 { - return r.udmSubRepository.Inserts(authArr) - } - return 0 -} diff --git a/src/modules/system/controller/sys_log_login.go b/src/modules/system/controller/sys_log_login.go index 7a75b49d..ad6a7a70 100644 --- a/src/modules/system/controller/sys_log_login.go +++ b/src/modules/system/controller/sys_log_login.go @@ -40,7 +40,8 @@ type SysLogLoginController struct { // GET /list func (s *SysLogLoginController) List(c *gin.Context) { querys := ctx.QueryMap(c) - data := s.sysLogLoginService.SelectSysLogLoginPage(querys) + dataScopeSQL := ctx.LoginUserToDataScopeSQL(c, "d", "u") + data := s.sysLogLoginService.SelectSysLogLoginPage(querys, dataScopeSQL) rows := data["rows"].([]model.SysLogLogin) // 闭包函数处理多语言 diff --git a/src/modules/system/controller/sys_log_operate.go b/src/modules/system/controller/sys_log_operate.go index 1a778669..8e14ed78 100644 --- a/src/modules/system/controller/sys_log_operate.go +++ b/src/modules/system/controller/sys_log_operate.go @@ -49,6 +49,8 @@ func (s *SysLogOperateController) List(c *gin.Context) { querys["operName"] = userName } data := s.SysLogOperateService.SelectSysLogOperatePage(querys) + dataScopeSQL := "" // ctx.LoginUserToDataScopeSQL(c, "d", "u") + data := s.SysLogOperateService.SelectSysLogOperatePage(querys, dataScopeSQL) rows := data["rows"].([]model.SysLogOperate) // 闭包函数处理多语言 diff --git a/src/modules/system/repository/sys_log_login.go b/src/modules/system/repository/sys_log_login.go index 6fc0d693..8dfbc828 100644 --- a/src/modules/system/repository/sys_log_login.go +++ b/src/modules/system/repository/sys_log_login.go @@ -5,7 +5,7 @@ import "be.ems/src/modules/system/model" // ISysLogLogin 系统登录日志表 数据层接口 type ISysLogLogin interface { // SelectSysLogLoginPage 分页查询系统登录日志集合 - SelectSysLogLoginPage(query map[string]any) map[string]any + SelectSysLogLoginPage(query map[string]any, dataScopeSQL string) map[string]any // SelectSysLogLoginList 查询系统登录日志集合 SelectSysLogLoginList(sysLogLogin model.SysLogLogin) []model.SysLogLogin diff --git a/src/modules/system/repository/sys_log_login.impl.go b/src/modules/system/repository/sys_log_login.impl.go index 178a745e..d32e17b7 100644 --- a/src/modules/system/repository/sys_log_login.impl.go +++ b/src/modules/system/repository/sys_log_login.impl.go @@ -53,7 +53,7 @@ func (r *SysLogLoginImpl) convertResultRows(rows []map[string]any) []model.SysLo } // SelectSysLogLoginPage 分页查询系统登录日志集合 -func (r *SysLogLoginImpl) SelectSysLogLoginPage(query map[string]any) map[string]any { +func (r *SysLogLoginImpl) SelectSysLogLoginPage(query map[string]any, dataScopeSQL string) map[string]any { // 查询条件拼接 var conditions []string var params []any @@ -87,9 +87,23 @@ func (r *SysLogLoginImpl) SelectSysLogLoginPage(query map[string]any) map[string } // 构建查询条件语句 + selectSql := r.selectSql + totalSql := "select count(login_id) as 'total' from sys_log_login" whereSql := "" if len(conditions) > 0 { whereSql += " where " + strings.Join(conditions, " and ") + whereSql += dataScopeSQL + } else if dataScopeSQL != "" { + totalSql = `select count(o.login_id) as 'total' + from sys_log_login o + left join sys_user u on u.user_name = o.user_name + left join sys_dept d on u.dept_id = d.dept_id` + selectSql = `select o.login_id, o.user_name, o.ipaddr, o.login_location, + o.browser, o.os, o.status, o.msg, o.login_time + from sys_log_login o + left join sys_user u on u.user_name = o.user_name + left join sys_dept d on u.dept_id = d.dept_id` + whereSql += " where 1=1" + dataScopeSQL } // 查询结果 @@ -99,7 +113,6 @@ func (r *SysLogLoginImpl) SelectSysLogLoginPage(query map[string]any) map[string } // 查询数量 长度为0直接返回 - totalSql := "select count(1) as 'total' from sys_log_login" totalRows, err := datasource.RawDB("", totalSql+whereSql, params) if err != nil { logger.Errorf("total err => %v", err) @@ -119,7 +132,7 @@ func (r *SysLogLoginImpl) SelectSysLogLoginPage(query map[string]any) map[string params = append(params, pageSize) // 查询数据 - querySql := r.selectSql + whereSql + pageSql + querySql := selectSql + whereSql + dataScopeSQL + pageSql results, err := datasource.RawDB("", querySql, params) if err != nil { logger.Errorf("query err => %v", err) diff --git a/src/modules/system/repository/sys_log_operate.go b/src/modules/system/repository/sys_log_operate.go index 9f8a98c6..5f8cb010 100644 --- a/src/modules/system/repository/sys_log_operate.go +++ b/src/modules/system/repository/sys_log_operate.go @@ -5,7 +5,7 @@ import "be.ems/src/modules/system/model" // ISysLogOperate 操作日志表 数据层接口 type ISysLogOperate interface { // SelectSysLogOperatePage 分页查询系统操作日志集合 - SelectSysLogOperatePage(query map[string]any) map[string]any + SelectSysLogOperatePage(query map[string]any, dataScopeSQL string) map[string]any // SelectSysLogOperateList 查询系统操作日志集合 SelectSysLogOperateList(sysLogOperate model.SysLogOperate) []model.SysLogOperate diff --git a/src/modules/system/repository/sys_log_operate.impl.go b/src/modules/system/repository/sys_log_operate.impl.go index 23873a65..5fad609f 100644 --- a/src/modules/system/repository/sys_log_operate.impl.go +++ b/src/modules/system/repository/sys_log_operate.impl.go @@ -67,7 +67,7 @@ func (r *SysLogOperateImpl) convertResultRows(rows []map[string]any) []model.Sys } // SelectSysLogOperatePage 分页查询系统操作日志集合 -func (r *SysLogOperateImpl) SelectSysLogOperatePage(query map[string]any) map[string]any { +func (r *SysLogOperateImpl) SelectSysLogOperatePage(query map[string]any, dataScopeSQL string) map[string]any { // 查询条件拼接 var conditions []string var params []any @@ -120,9 +120,24 @@ func (r *SysLogOperateImpl) SelectSysLogOperatePage(query map[string]any) map[st } // 构建查询条件语句 + selectSql := r.selectSql + totalSql := "select count(oper_id) as 'total' from sys_log_operate" whereSql := "" if len(conditions) > 0 { whereSql += " where " + strings.Join(conditions, " and ") + whereSql += dataScopeSQL + } else if dataScopeSQL != "" { + totalSql = `select count(o.oper_id) as 'total' + from sys_log_operate o + left join sys_user u on u.user_name = o.oper_name + left join sys_dept d on u.dept_id = d.dept_id` + selectSql = `select + o.oper_id, o.title, o.business_type, o.method, o.request_method, o.operator_type, o.oper_name, o.dept_name, + o.oper_url, o.oper_ip, o.oper_location, o.oper_param, o.oper_msg, o.status, o.oper_time, o.cost_time + from sys_log_operate o + left join sys_user u on u.user_name = o.oper_name + left join sys_dept d on u.dept_id = d.dept_id` + whereSql += " where 1=1" + dataScopeSQL } // 查询结果 @@ -132,7 +147,6 @@ func (r *SysLogOperateImpl) SelectSysLogOperatePage(query map[string]any) map[st } // 查询数量 长度为0直接返回 - totalSql := "select count(1) as 'total' from sys_log_operate l" totalRows, err := datasource.RawDB("", totalSql+whereSql, params) if err != nil { logger.Errorf("total err => %v", err) @@ -152,7 +166,7 @@ func (r *SysLogOperateImpl) SelectSysLogOperatePage(query map[string]any) map[st params = append(params, pageSize) // 查询数据 - querySql := r.selectSql + whereSql + pageSql + querySql := selectSql + whereSql + pageSql results, err := datasource.RawDB("", querySql, params) if err != nil { logger.Errorf("query err => %v", err) diff --git a/src/modules/system/service/sys_log_login.go b/src/modules/system/service/sys_log_login.go index 2bda2f41..9b62ac30 100644 --- a/src/modules/system/service/sys_log_login.go +++ b/src/modules/system/service/sys_log_login.go @@ -5,7 +5,7 @@ import "be.ems/src/modules/system/model" // ISysLogLogin 系统登录日志 服务层接口 type ISysLogLogin interface { // SelectSysLogLoginPage 分页查询系统登录日志集合 - SelectSysLogLoginPage(query map[string]any) map[string]any + SelectSysLogLoginPage(query map[string]any, dataScopeSQL string) map[string]any // SelectSysLogLoginList 查询系统登录日志集合 SelectSysLogLoginList(sysLogLogin model.SysLogLogin) []model.SysLogLogin diff --git a/src/modules/system/service/sys_log_login.impl.go b/src/modules/system/service/sys_log_login.impl.go index 83fe9a28..226b0da2 100644 --- a/src/modules/system/service/sys_log_login.impl.go +++ b/src/modules/system/service/sys_log_login.impl.go @@ -17,8 +17,8 @@ type SysLogLoginImpl struct { } // SelectSysLogLoginPage 分页查询系统登录日志集合 -func (s *SysLogLoginImpl) SelectSysLogLoginPage(query map[string]any) map[string]any { - return s.sysLogLoginService.SelectSysLogLoginPage(query) +func (s *SysLogLoginImpl) SelectSysLogLoginPage(query map[string]any, dataScopeSQL string) map[string]any { + return s.sysLogLoginService.SelectSysLogLoginPage(query, dataScopeSQL) } // SelectSysLogLoginList 查询系统登录日志集合 diff --git a/src/modules/system/service/sys_log_operate.go b/src/modules/system/service/sys_log_operate.go index 8a7eeb22..d0857b6b 100644 --- a/src/modules/system/service/sys_log_operate.go +++ b/src/modules/system/service/sys_log_operate.go @@ -5,7 +5,7 @@ import "be.ems/src/modules/system/model" // ISysLogOperate 操作日志表 服务层接口 type ISysLogOperate interface { // SelectSysLogOperatePage 分页查询系统操作日志集合 - SelectSysLogOperatePage(query map[string]any) map[string]any + SelectSysLogOperatePage(query map[string]any, dataScopeSQL string) map[string]any // SelectSysLogOperateList 查询系统操作日志集合 SelectSysLogOperateList(sysLogOperate model.SysLogOperate) []model.SysLogOperate diff --git a/src/modules/system/service/sys_log_operate.impl.go b/src/modules/system/service/sys_log_operate.impl.go index 540e5fd4..c6edb18b 100644 --- a/src/modules/system/service/sys_log_operate.impl.go +++ b/src/modules/system/service/sys_log_operate.impl.go @@ -17,8 +17,8 @@ type SysLogOperateImpl struct { } // SelectSysLogOperatePage 分页查询系统操作日志集合 -func (r *SysLogOperateImpl) SelectSysLogOperatePage(query map[string]any) map[string]any { - return r.SysLogOperateService.SelectSysLogOperatePage(query) +func (r *SysLogOperateImpl) SelectSysLogOperatePage(query map[string]any, dataScopeSQL string) map[string]any { + return r.SysLogOperateService.SelectSysLogOperatePage(query, dataScopeSQL) } // SelectSysLogOperateList 查询系统操作日志集合 diff --git a/src/modules/system/system.go b/src/modules/system/system.go index c89bf7a4..f2cc94da 100644 --- a/src/modules/system/system.go +++ b/src/modules/system/system.go @@ -249,7 +249,7 @@ func Setup(router *gin.Engine) { controller.NewSysMenu.Remove, ) sysMenuGroup.GET("/treeSelect", - middleware.PreAuthorize(map[string][]string{"hasPerms": {"system:menu:list"}}), + middleware.PreAuthorize(map[string][]string{"hasPerms": {"system:menu:list", "system:dept:list"}}), controller.NewSysMenu.TreeSelect, ) sysMenuGroup.GET("/roleMenuTreeSelect/:roleId", diff --git a/src/modules/trace/service/tcpdump.impl.go b/src/modules/trace/service/tcpdump.impl.go index 5fb1c2ea..005ee2b8 100644 --- a/src/modules/trace/service/tcpdump.impl.go +++ b/src/modules/trace/service/tcpdump.impl.go @@ -5,9 +5,7 @@ import ( "strings" "time" - "be.ems/src/framework/config" "be.ems/src/framework/logger" - "be.ems/src/framework/utils/cmd" "be.ems/src/framework/utils/date" neService "be.ems/src/modules/network_element/service" ) @@ -28,23 +26,26 @@ type TcpdumpImpl struct { // DumpStart 触发tcpdump开始抓包 filePcapName, err func (s *TcpdumpImpl) DumpStart(neType, neId, cmdStr string) (string, error) { - // 检查网元信息 + // 查询网元获取IP neInfo := s.neInfoService.SelectNeInfoByNeTypeAndNeID(neType, neId) - if neInfo.NeId != neId { + if neInfo.NeId != neId || neInfo.IP == "" { return "", fmt.Errorf("noData") } - // SSH命令 - usernameNe := config.Get("ne.user").(string) // 网元统一用户 - sshHost := fmt.Sprintf("%s@%s", usernameNe, neInfo.IP) + // 网元主机的SSH客户端 + sshClient, err := s.neInfoService.NeRunSSHClient(neInfo.NeType, neInfo.NeId) + if err != nil { + return "", err + } + defer sshClient.Close() // 是否拥有sudo权限并拼接 withSudo := "" - if _, err := cmd.ExecWithCheck("ssh", sshHost, "sudo -n uname"); err == nil { + if _, err := sshClient.RunCMD("sudo -n uname"); err == nil { withSudo = "sudo " } - if msg, err := cmd.ExecWithCheck("ssh", sshHost, fmt.Sprintf("%s tcpdump --version", withSudo)); err != nil { + if msg, err := sshClient.RunCMD(fmt.Sprintf("%s tcpdump --version", withSudo)); err != nil { // stderr: bash: tcpdump:未找到命令 => exit status 127 msg = strings.TrimSpace(msg) logger.Warnf("DumpStart err: %s => %s", msg, err.Error()) @@ -58,7 +59,7 @@ func (s *TcpdumpImpl) DumpStart(neType, neId, cmdStr string) (string, error) { sendCmd := fmt.Sprintf("cd /tmp \n %s nohup timeout 30m tcpdump -i any %s -s0 -w %s.pcap > %s.log 2>&1 & \necho $!", withSudo, cmdStr, fileName, fileName) // cd /tmp // sudo nohup timeout 60m tcpdump -i any -n -s 0 -v -w -s0 -w 20240115140822_UDM_001.pcap > 20240115140822_UDM_001.log 2>&1 & echo $! - msg, err := cmd.ExecWithCheck("ssh", sshHost, sendCmd) + msg, err := sshClient.RunCMD(sendCmd) msg = strings.TrimSpace(msg) if err != nil || strings.HasPrefix(msg, "stderr:") { logger.Warnf("DumpStart err: %s => %s", msg, err.Error()) @@ -73,19 +74,22 @@ func (s *TcpdumpImpl) DumpStart(neType, neId, cmdStr string) (string, error) { // DumpStop 停止已存在抓包句柄 func (s *TcpdumpImpl) DumpStop(neType, neId, fileName string) (string, error) { - // 检查网元信息 + // 查询网元获取IP neInfo := s.neInfoService.SelectNeInfoByNeTypeAndNeID(neType, neId) - if neInfo.NeId != neId { + if neInfo.NeId != neId || neInfo.IP == "" { return "", fmt.Errorf("noData") } - // SSH命令 - usernameNe := config.Get("ne.user").(string) // 网元统一用户 - sshHost := fmt.Sprintf("%s@%s", usernameNe, neInfo.IP) + // 网元主机的SSH客户端 + sshClient, err := s.neInfoService.NeRunSSHClient(neInfo.NeType, neInfo.NeId) + if err != nil { + return "", err + } + defer sshClient.Close() // 是否拥有sudo权限并拼接 withSudo := "" - if _, err := cmd.ExecWithCheck("ssh", sshHost, "sudo -n uname"); err == nil { + if _, err := sshClient.RunCMD("sudo -n uname"); err == nil { withSudo = "sudo " } @@ -104,7 +108,7 @@ func (s *TcpdumpImpl) DumpStop(neType, neId, fileName string) (string, error) { // 拼装命令 sendCmd := fmt.Sprintf("cd /tmp \n %s kill %s %s", withSudo, pid, viewLogFile) - msg, err := cmd.ExecWithCheck("ssh", sshHost, sendCmd) + msg, err := sshClient.RunCMD(sendCmd) delete(s.tcpdumpPIDMap, neTypeID) if err != nil || strings.HasPrefix(msg, "stderr:") { logger.Warnf("DumpStop err: %s => %s", strings.TrimSpace(msg), err.Error()) @@ -115,23 +119,26 @@ func (s *TcpdumpImpl) DumpStop(neType, neId, fileName string) (string, error) { // DumpUPF UPF标准版抓包 func (s *TcpdumpImpl) DumpUPF(neType, neId, cmdStr string) (string, string, error) { - // 检查网元信息 + // 查询网元获取IP neInfo := s.neInfoService.SelectNeInfoByNeTypeAndNeID(neType, neId) - if neInfo.NeId != neId { + if neInfo.NeId != neId || neInfo.IP == "" { return "", "", fmt.Errorf("noData") } - // SSH命令 - usernameNe := config.Get("ne.user").(string) // 网元统一用户 - sshHost := fmt.Sprintf("%s@%s", usernameNe, neInfo.IP) + // 网元主机的SSH客户端 + sshClient, err := s.neInfoService.NeRunSSHClient(neInfo.NeType, neInfo.NeId) + if err != nil { + return "", "", err + } + defer sshClient.Close() // 是否拥有sudo权限并拼接 withSudo := "" - if _, err := cmd.ExecWithCheck("ssh", sshHost, "sudo -n uname"); err == nil { + if _, err := sshClient.RunCMD("sudo -n uname"); err == nil { withSudo = "sudo " } - if msg, err := cmd.ExecWithCheck("ssh", sshHost, fmt.Sprintf("%s expect -version", withSudo)); err != nil { + if msg, err := sshClient.RunCMD(fmt.Sprintf("%s expect -version", withSudo)); err != nil { // stderr: bash: expect:未找到命令 => exit status 127 msg = strings.TrimSpace(msg) logger.Warnf("DumpUPF err: %s => %s", msg, err.Error()) @@ -160,7 +167,7 @@ func (s *TcpdumpImpl) DumpUPF(neType, neId, cmdStr string) (string, string, erro // sudo chmod +x pcapUPF.sh // expect ./cap.sh 'pcap dispatch trace off' > 20240115165701_UDM_001.log 2>&1 // cat 20240115165701_UDM_001.log - msg, err := cmd.ExecWithCheck("ssh", sshHost, sendCmd) + msg, err := sshClient.RunCMD(sendCmd) msg = strings.TrimSpace(msg) if err != nil || strings.HasPrefix(msg, "stderr:") { logger.Warnf("DumpUPF err: %s => %s", msg, err.Error()) diff --git a/src/modules/trace/trace.go b/src/modules/trace/trace.go index f045f708..dd38c724 100644 --- a/src/modules/trace/trace.go +++ b/src/modules/trace/trace.go @@ -13,8 +13,10 @@ import ( func Setup(router *gin.Engine) { logger.Infof("开始加载 ====> trace 模块路由") + traceGroup := router.Group("/trace") + // 信令抓包 - tcpdumpGroup := router.Group("/tcpdump") + tcpdumpGroup := traceGroup.Group("/tcpdump") { tcpdumpGroup.POST("/start", middleware.PreAuthorize(nil), diff --git a/src/modules/ws/controller/ws.go b/src/modules/ws/controller/ws.go index 04257dd3..8e077c03 100644 --- a/src/modules/ws/controller/ws.go +++ b/src/modules/ws/controller/ws.go @@ -257,18 +257,18 @@ func (s *WSController) Telnet(c *gin.Context) { defer client.Close() // 终端单行字符数 - cols, err := strconv.Atoi(c.Query("cols")) - if err != nil || cols > 254 { - cols = 80 + cols, err := strconv.Atoi(c.DefaultQuery("cols", "120")) + if err != nil { + cols = 120 } // 终端显示行数 - rows, err := strconv.Atoi(c.Query("rows")) - if err != nil || cols > rows { - rows = 40 + rows, err := strconv.Atoi(c.DefaultQuery("rows", "128")) + if err != nil { + rows = 128 } // 创建Telnet客户端会话 - clientSession, err := client.NewClientSession(uint8(cols), uint8(rows)) + clientSession, err := client.NewClientSession(cols, rows) if err != nil { // 连接主机失败,请检查连接参数后重试 c.JSON(200, result.ErrMsg(i18n.TKey(language, "neHost.errByHostInfo"))) diff --git a/src/modules/ws/processor/cdr_connect.go b/src/modules/ws/processor/cdr_connect.go index bd05465c..fc8dc1e8 100644 --- a/src/modules/ws/processor/cdr_connect.go +++ b/src/modules/ws/processor/cdr_connect.go @@ -10,17 +10,17 @@ import ( neDataService "be.ems/src/modules/network_data/service" ) -// GetCDRConnect 获取CDR会话事件-IMS -func GetCDRConnect(requestID string, data any) ([]byte, error) { +// GetCDRConnectByIMS 获取CDR会话事件-IMS +func GetCDRConnectByIMS(requestID string, data any) ([]byte, error) { msgByte, _ := json.Marshal(data) - var query neDataModel.CDREventQuery + var query neDataModel.CDREventIMSQuery err := json.Unmarshal(msgByte, &query) if err != nil { logger.Warnf("ws processor GetCDRConnect err: %s", err.Error()) return nil, fmt.Errorf("query data structure error") } - dataMap := neDataService.NewCDREventImpl.SelectPage(query) + dataMap := neDataService.NewCDREventIMSImpl.SelectPage(query) resultByte, err := json.Marshal(result.Ok(map[string]any{ "requestId": requestID, "data": dataMap, @@ -28,17 +28,17 @@ func GetCDRConnect(requestID string, data any) ([]byte, error) { return resultByte, err } -// GetCDRConnect 获取CDR会话事件-SMF -func GetSMFCDRConnect(requestID string, data any) ([]byte, error) { +// GetCDRConnectBySMF 获取CDR会话事件-SMF +func GetCDRConnectBySMF(requestID string, data any) ([]byte, error) { msgByte, _ := json.Marshal(data) - var query neDataModel.SMFCDREventQuery + var query neDataModel.CDREventSMFQuery err := json.Unmarshal(msgByte, &query) if err != nil { logger.Warnf("ws processor GetCDRConnect err: %s", err.Error()) return nil, fmt.Errorf("query data structure error") } - dataMap := neDataService.NewSMFCDREventImpl.SelectPage(query) + dataMap := neDataService.NewCDREventSMFImpl.SelectPage(query) resultByte, err := json.Marshal(result.Ok(map[string]any{ "requestId": requestID, "data": dataMap, diff --git a/src/modules/ws/processor/ne_state.go b/src/modules/ws/processor/ne_state.go index dcf5df15..64e76e72 100644 --- a/src/modules/ws/processor/ne_state.go +++ b/src/modules/ws/processor/ne_state.go @@ -6,6 +6,7 @@ import ( "be.ems/src/framework/logger" "be.ems/src/framework/vo/result" + neFetchlink "be.ems/src/modules/network_element/fetch_link" neService "be.ems/src/modules/network_element/service" ) @@ -33,7 +34,7 @@ func GetNeState(requestID string, data any) ([]byte, error) { } // 网元直连 - resData, err := neService.NeState(neInfo) + resData, err := neFetchlink.NeState(neInfo) if err != nil { resultByte, err := json.Marshal(result.Ok(map[string]any{ "requestId": requestID, diff --git a/src/modules/ws/processor/ue_connect.go b/src/modules/ws/processor/ue_connect.go index 29caace6..bb0f6492 100644 --- a/src/modules/ws/processor/ue_connect.go +++ b/src/modules/ws/processor/ue_connect.go @@ -10,17 +10,35 @@ import ( neDataService "be.ems/src/modules/network_data/service" ) -// GetUEConnect 获取UE会话事件-AMF -func GetUEConnect(requestID string, data any) ([]byte, error) { +// GetUEConnectByAMF 获取UE会话事件-AMF +func GetUEConnectByAMF(requestID string, data any) ([]byte, error) { msgByte, _ := json.Marshal(data) - var query neDataModel.UEEventQuery + var query neDataModel.UEEventAMFQuery err := json.Unmarshal(msgByte, &query) if err != nil { - logger.Warnf("ws processor GetUEConnect err: %s", err.Error()) + logger.Warnf("ws processor GetUEConnectByAMF err: %s", err.Error()) return nil, fmt.Errorf("query data structure error") } - dataMap := neDataService.NewUEEventImpl.SelectPage(query) + dataMap := neDataService.NewUEEventAMFImpl.SelectPage(query) + resultByte, err := json.Marshal(result.Ok(map[string]any{ + "requestId": requestID, + "data": dataMap, + })) + return resultByte, err +} + +// GetUEConnectByMME 获取UE会话事件-MME +func GetUEConnectByMME(requestID string, data any) ([]byte, error) { + msgByte, _ := json.Marshal(data) + var query neDataModel.UEEventMMEQuery + err := json.Unmarshal(msgByte, &query) + if err != nil { + logger.Warnf("ws processor GetUEConnectByMME err: %s", err.Error()) + return nil, fmt.Errorf("query data structure error") + } + + dataMap := neDataService.NewUEEventMMEImpl.SelectPage(query) resultByte, err := json.Marshal(result.Ok(map[string]any{ "requestId": requestID, "data": dataMap, diff --git a/src/modules/ws/service/ws_receive.impl.go b/src/modules/ws/service/ws_receive.impl.go index 3df49304..553b1c63 100644 --- a/src/modules/ws/service/ws_receive.impl.go +++ b/src/modules/ws/service/ws_receive.impl.go @@ -68,10 +68,14 @@ func (s *WSReceiveImpl) AsyncReceive(client *model.WSClient, reqMsg model.WSRequ resByte, err = processor.GetProcessData(reqMsg.RequestID, reqMsg.Data) case "net": resByte, err = processor.GetNetConnections(reqMsg.RequestID, reqMsg.Data) - case "cdr": - resByte, err = processor.GetCDRConnect(reqMsg.RequestID, reqMsg.Data) - case "ue": - resByte, err = processor.GetUEConnect(reqMsg.RequestID, reqMsg.Data) + case "ims_cdr": + resByte, err = processor.GetCDRConnectByIMS(reqMsg.RequestID, reqMsg.Data) + case "smf_cdr": + resByte, err = processor.GetCDRConnectBySMF(reqMsg.RequestID, reqMsg.Data) + case "amf_ue": + resByte, err = processor.GetUEConnectByAMF(reqMsg.RequestID, reqMsg.Data) + case "mme_ue": + resByte, err = processor.GetUEConnectByMME(reqMsg.RequestID, reqMsg.Data) case "upf_tf": resByte, err = processor.GetUPFTotalFlow(reqMsg.RequestID, reqMsg.Data) case "ne_state": diff --git a/src/modules/ws/service/ws_send.impl.go b/src/modules/ws/service/ws_send.impl.go index 0720cc27..94c23b71 100644 --- a/src/modules/ws/service/ws_send.impl.go +++ b/src/modules/ws/service/ws_send.impl.go @@ -18,8 +18,12 @@ const ( GROUP_KPI_UPF = "12" // 组号-IMS_CDR会话事件 GROUP_IMS_CDR = "1005" + // 组号-SMF_CDR会话事件 + GROUP_SMF_CDR = "1006" // 组号-AMF_UE会话事件 GROUP_AMF_UE = "1010" + // 组号-MME_UE会话事件 + GROUP_MME_UE = "1011" ) // 实例化服务层 WSSendImpl 结构体 diff --git a/sshsvc/makefile b/sshsvc/makefile index 63b76445..aed9f418 100644 --- a/sshsvc/makefile +++ b/sshsvc/makefile @@ -7,7 +7,7 @@ BINNAME = sshsvc .PHONY: build $(BINNAME) build $(BINNAME): - go build -o $(BINNAME) -v -ldflags "-X '$(LIBDIR)/global.Version=$(VERSION)' \ + go build -o $(BINNAME) -v -ldflags "-s -w -X '$(LIBDIR)/global.Version=$(VERSION)' \ -X '$(LIBDIR)/global.BuildTime=`date`' \ -X '$(LIBDIR)/global.GoVer=`go version`'"