Compare commits
40 Commits
2.2505.4-2
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
dee8a166ff | ||
|
|
8705ac68c1 | ||
|
|
55b6aa348b | ||
|
|
af4d2b70cc | ||
|
|
85afb33c59 | ||
|
|
e880eae549 | ||
|
|
9d63210d25 | ||
|
|
2662dd26e8 | ||
|
|
ac6df17e16 | ||
|
|
b46157bff7 | ||
|
|
9c50e6ef70 | ||
|
|
6c8383925d | ||
|
|
4f118b895b | ||
|
|
39bfe64828 | ||
|
|
72fc915481 | ||
|
|
7e42dd91e4 | ||
|
|
a982a41e05 | ||
|
|
38f5eea82e | ||
|
|
5237710c8e | ||
|
|
f95847c915 | ||
|
|
2fe05c9850 | ||
|
|
705d02aa78 | ||
|
|
3e9a8fc067 | ||
|
|
74e6c75a05 | ||
|
|
8595a1c0cb | ||
|
|
986624c48f | ||
|
|
32630fbb4a | ||
|
|
e0336bb0f3 | ||
|
|
041125fb7a | ||
|
|
dcf513bcfd | ||
|
|
88d6f36a18 | ||
|
|
4fd359add4 | ||
|
|
12f5330f85 | ||
|
|
1c1c564691 | ||
|
|
f61f546d55 | ||
|
|
4451705e67 | ||
|
|
f08c1e02ed | ||
|
|
760f840791 | ||
|
|
344e9802d8 | ||
|
|
55dd32b124 |
51
CHANGELOG.md
51
CHANGELOG.md
@@ -1,5 +1,56 @@
|
||||
# 版本发布日志
|
||||
|
||||
## 2.2503.6-20250509
|
||||
|
||||
- 更新 fix: 网元主机title唯一导致冲突5002修改失败
|
||||
- 新增 网元信令跟踪功能
|
||||
- 新增 ws模块消息码变更及修复断链情况
|
||||
- 优化 数据库引用变更
|
||||
|
||||
## 2.2503.5-20250412
|
||||
|
||||
- 更新 角色系统参数配置权限分配
|
||||
|
||||
## 2.2503.4-20250331
|
||||
|
||||
- 更新 更新部分kpi_title_en名称
|
||||
|
||||
## 2.2503.3-20250321
|
||||
|
||||
- 更新 SMF/UPF参数配置
|
||||
- 重构 UPF流量总计7,30天累计数据查询
|
||||
- 优化 默认获取Redis实例时支持不指定数据源
|
||||
|
||||
## 2.2503.2-20250314
|
||||
|
||||
- 更新 AMF参数配置systemFeatOpt
|
||||
- 优化 调度任务进行告警检查网元状态
|
||||
- 优化 系统菜单按钮权限状态可修改
|
||||
- 优化 网元状态请求超时时间至2000毫秒
|
||||
|
||||
## 2.2503.1-20250308
|
||||
|
||||
- 优化 告警转发邮件优化
|
||||
- 优化 优化UPF流量统计逻辑
|
||||
- 优化 看板菜单权限控制部分显示
|
||||
|
||||
## 2.2502.4-20250228
|
||||
|
||||
- 修复 SGW-C导出管理多语言显示
|
||||
- 优化 网元状态告警处理逻辑,增加状态更新时间戳
|
||||
- 修复 CDR/Event 查询时间格式统一时间戳int64
|
||||
|
||||
## 2.2502.3-20250221
|
||||
|
||||
- 修复 网元授权序号查询
|
||||
- 更新 SGWC导出表格数据字段修改/兼容3G的SGWC字段
|
||||
|
||||
## 2.2502.2-20250214
|
||||
|
||||
- 修复 修改调度任务导出SMSC-CDR时间格式错误
|
||||
- 修复 导出备份配置文件同步FTP功能配置调整
|
||||
- 更新 调整/路由提示信息
|
||||
|
||||
## 2.2502.1-20250208
|
||||
|
||||
- 新增 基站状态记录上报和导出功能
|
||||
|
||||
@@ -504,6 +504,41 @@ amf:
|
||||
filter: '{"0":"false","1":"true"}'
|
||||
display: "statusReportEnabled"
|
||||
comment: ""
|
||||
- name: "getTraceDataFromUdm"
|
||||
type: "bool"
|
||||
value: "0"
|
||||
access: "read-write"
|
||||
filter: '{"0":"false","1":"true"}'
|
||||
display: "getTraceDataFromUdm"
|
||||
comment: ""
|
||||
- name: "disableLocationReportControl"
|
||||
type: "bool"
|
||||
value: "0"
|
||||
access: "read-write"
|
||||
filter: '{"0":"false","1":"true"}'
|
||||
display: "disableLocationReportControl"
|
||||
comment: ""
|
||||
- name: "sendDnnOiToSmf"
|
||||
type: "bool"
|
||||
value: "0"
|
||||
access: "read-write"
|
||||
filter: '{"0":"false","1":"true"}'
|
||||
display: "sendDnnOiToSmf"
|
||||
comment: ""
|
||||
- name: "udsfEnabled"
|
||||
type: "bool"
|
||||
value: "0"
|
||||
access: "read-write"
|
||||
filter: '{"0":"false","1":"true"}'
|
||||
display: "udsfEnabled"
|
||||
comment: ""
|
||||
- name: "enableHttpPprof"
|
||||
type: "bool"
|
||||
value: "0"
|
||||
access: "read-write"
|
||||
filter: '{"0":"false","1":"true"}'
|
||||
display: "enableHttpPprof"
|
||||
comment: ""
|
||||
gnbList:
|
||||
display: "Gnb List Config"
|
||||
sort: 13
|
||||
|
||||
@@ -36,8 +36,8 @@ CREATE TABLE `kpi_title` (
|
||||
-- Records of kpi_title
|
||||
-- ----------------------------
|
||||
INSERT INTO `kpi_title` VALUES (1, 'AMF', 'AMF.01', '{\"cn\": \"AMF注册态用户数\", \"en\": \"AMF.RegSub\"}', 'AMF注册态用户数', 'AMF.RegSub');
|
||||
INSERT INTO `kpi_title` VALUES (2, 'AMF', 'AMF.02', '{\"cn\": \"AMF初始注册请求次数\", \"en\": \"AMF.AttInitReg\"}', 'AMF初始注册请求次数', 'AMF.AttInitReg');
|
||||
INSERT INTO `kpi_title` VALUES (3, 'AMF', 'AMF.03', '{\"cn\": \"AMF初始注册成功次数\", \"en\": \"AMF.SuccInitReg\"}', 'AMF初始注册成功次数', 'AMF.SuccInitReg');
|
||||
INSERT INTO `kpi_title` VALUES (2, 'AMF', 'AMF.02', '{\"cn\": \"AMF初始注册请求次数\", \"en\": \"AMF.AttInitReg\"}', 'AMF初始注册请求次数', '5G Registration Request');
|
||||
INSERT INTO `kpi_title` VALUES (3, 'AMF', 'AMF.03', '{\"cn\": \"AMF初始注册成功次数\", \"en\": \"AMF.SuccInitReg\"}', 'AMF初始注册成功次数', '5G Registration Success');
|
||||
INSERT INTO `kpi_title` VALUES (4, 'AMF', 'AMF.04', '{\"cn\": \"AMF初始注册失败次数_非法用户\", \"en\": \"AMF.FailedInitReg.3\"}', 'AMF初始注册失败次数_非法用户', 'AMF.FailedInitReg.3');
|
||||
INSERT INTO `kpi_title` VALUES (5, 'AMF', 'AMF.05', '{\"cn\": \"AMF初始注册失败次数_PEI不允许\", \"en\": \"AMF.FailedInitReg.5\"}', 'AMF初始注册失败次数_PEI不允许', 'AMF.FailedInitReg.5');
|
||||
INSERT INTO `kpi_title` VALUES (6, 'AMF', 'AMF.06', '{\"cn\": \"AMF初始注册失败次数_非法设备\", \"en\": \"AMF.FailedInitReg.6\"}', 'AMF初始注册失败次数_非法设备', 'AMF.FailedInitReg.6');
|
||||
@@ -80,8 +80,8 @@ INSERT INTO `kpi_title` VALUES (42, 'AUSF', 'AUSF.02', '{\"cn\": \"鉴权请求
|
||||
INSERT INTO `kpi_title` VALUES (43, 'UPF', 'UPF.01', '{\"cn\": \"PFCP会话建立成功次数\", \"en\": \"UPF.PfcpSessionEstabSucc\"}', 'PFCP会话建立成功次数', 'UPF.PfcpSessionEstabSucc');
|
||||
INSERT INTO `kpi_title` VALUES (44, 'UPF', 'UPF.02', '{\"cn\": \"PFCP会话建立请求次数\", \"en\": \"UPF.PfcpSessionEstabReq\"}', 'PFCP会话建立请求次数', 'UPF.PfcpSessionEstabReq');
|
||||
INSERT INTO `kpi_title` VALUES (45, 'UPF', 'UPF.03', '{\"cn\": \"N6接口上行字节数\", \"en\": \"UPF.N6OgOct\"}', 'N6接口上行字节数', 'UPF.N6OgOct');
|
||||
INSERT INTO `kpi_title` VALUES (46, 'UPF', 'UPF.04', '{\"cn\": \"N6接口下行字节数\", \"en\": \"UPF.N6IncOct\"}', 'N6接口下行字节数', 'UPF.N6IncOct');
|
||||
INSERT INTO `kpi_title` VALUES (47, 'UPF', 'UPF.05', '{\"cn\": \"N3接口上行字节数\", \"en\": \"UPF.N3OgOct\"}', 'N3接口上行字节数', 'UPF.N3OgOct');
|
||||
INSERT INTO `kpi_title` VALUES (46, 'UPF', 'UPF.04', '{\"cn\": \"N6接口下行字节数\", \"en\": \"UPF.N6IncOct\"}', 'N6接口下行字节数', 'UPF Downlink Throughput');
|
||||
INSERT INTO `kpi_title` VALUES (47, 'UPF', 'UPF.05', '{\"cn\": \"N3接口上行字节数\", \"en\": \"UPF.N3OgOct\"}', 'N3接口上行字节数', 'UPF Uplink Throughput');
|
||||
INSERT INTO `kpi_title` VALUES (48, 'UPF', 'UPF.06', '{\"cn\": \"N3接口下行字节数\", \"en\": \"UPF.N3IncOct\"}', 'N3接口下行字节数', 'UPF.N3IncOct');
|
||||
INSERT INTO `kpi_title` VALUES (49, 'UPF', 'UPF.07', '{\"cn\": \"SGi接口上行字节数\", \"en\": \"IP.PeakThroughputUlSgi\"}', 'SGi接口上行字节数', 'IP.PeakThroughputUlSgi');
|
||||
INSERT INTO `kpi_title` VALUES (50, 'UPF', 'UPF.08', '{\"cn\": \"SGi接口下行字节数\", \"en\": \"IP.PeakThroughputDlSgi\"}', 'SGi接口下行字节数', 'IP.PeakThroughputDlSgi');
|
||||
@@ -209,12 +209,12 @@ INSERT INTO `kpi_title` VALUES (171, 'MOCNGW', 'MOCNGW.32', '{\"cn\":\"DownlinkG
|
||||
INSERT INTO `kpi_title` VALUES (172, 'MOCNGW', 'MOCNGW.33', '{\"cn\":\"UplinkGenericNasTransport\",\"en\":\"UplinkGenericNasTransport\"}', 'UplinkGenericNasTransport', 'UplinkGenericNasTransport');
|
||||
INSERT INTO `kpi_title` VALUES (173, 'IMS', 'SCSCF.01', '{\"cn\": \"LTE接入注册用户数\",\"en\": \"UR.SubsLTE.fromVoLTE\"}', 'LTE接入注册用户数', 'UR.SubsLTE.fromVoLTE');
|
||||
INSERT INTO `kpi_title` VALUES (174, 'IMS', 'SCSCF.02', '{\"cn\": \"5G接入注册用户数\",\"en\": \"UR.Subs5G.fromVo5G\"}', '5G接入注册用户数', 'UR.Subs5G.fromVo5G');
|
||||
INSERT INTO `kpi_title` VALUES (175, 'IMS', 'SCSCF.03', '{\"cn\": \"初始注册成功次数\",\"en\": \"UR.SuccInitReg\"}', '初始注册成功次数', 'UR.SuccInitReg');
|
||||
INSERT INTO `kpi_title` VALUES (176, 'IMS', 'SCSCF.04', '{\"cn\": \"初始注册请求次数\",\"en\": \"UR.AttInitReg\"}', '初始注册请求次数', 'UR.AttInitReg');
|
||||
INSERT INTO `kpi_title` VALUES (175, 'IMS', 'SCSCF.03', '{\"cn\": \"初始注册成功次数\",\"en\": \"UR.SuccInitReg\"}', '初始注册成功次数', 'VoNR Registration Success');
|
||||
INSERT INTO `kpi_title` VALUES (176, 'IMS', 'SCSCF.04', '{\"cn\": \"初始注册请求次数\",\"en\": \"UR.AttInitReg\"}', '初始注册请求次数', 'VoNR Registration Request');
|
||||
INSERT INTO `kpi_title` VALUES (177, 'IMS', 'SCSCF.05', '{\"cn\": \"主叫接通次数\",\"en\": \"SC.SuccSessionOrig\"}', '主叫接通次数', 'SC.SuccSessionOrig');
|
||||
INSERT INTO `kpi_title` VALUES (178, 'IMS', 'SCSCF.06', '{\"cn\": \"主叫试呼次数\",\"en\": \"SC.AttSessionOrig\"}', '主叫试呼次数', 'SC.AttSessionOrig');
|
||||
INSERT INTO `kpi_title` VALUES (178, 'IMS', 'SCSCF.06', '{\"cn\": \"主叫试呼次数\",\"en\": \"SC.AttSessionOrig\"}', '主叫试呼次数', 'MO Call Attempt');
|
||||
INSERT INTO `kpi_title` VALUES (179, 'IMS', 'SCSCF.07', '{\"cn\": \"被叫接通次数\",\"en\": \"SC.SuccSessionTerm\"}', '被叫接通次数', 'SC.SuccSessionTerm');
|
||||
INSERT INTO `kpi_title` VALUES (180, 'IMS', 'SCSCF.08', '{\"cn\": \"被叫试呼次数\",\"en\": \"SC.AttSessionTerm\"}', '被叫试呼次数', 'SC.AttSessionTerm');
|
||||
INSERT INTO `kpi_title` VALUES (180, 'IMS', 'SCSCF.08', '{\"cn\": \"被叫试呼次数\",\"en\": \"SC.AttSessionTerm\"}', '被叫试呼次数', 'MT Call Attempt');
|
||||
INSERT INTO `kpi_title` VALUES (181, 'IMS', 'SCSCF.09', '{\"cn\": \"主叫应答次数\",\"en\": \"SC.AnsSessionOrig\"}', '主叫应答次数', 'SC.AnsSessionOrig');
|
||||
INSERT INTO `kpi_title` VALUES (182, 'IMS', 'SCSCF.10', '{\"cn\": \"主叫早释次数\",\"en\": \"SC.OrigRelBeforeRing\"}', '主叫早释次数', 'SC.OrigRelBeforeRing');
|
||||
INSERT INTO `kpi_title` VALUES (183, 'IMS', 'SCSCF.11', '{\"cn\": \"主叫振铃早释次数\",\"en\": \"SC.OrigRelAfterRing\"}', '主叫振铃早释次数', 'SC.OrigRelAfterRing');
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -27,7 +27,7 @@ INSERT INTO `kpi_c_title` VALUES (4, 'AMF', 'AMF.C.04', '5G Register Subscriber'
|
||||
INSERT INTO `kpi_c_title` VALUES (5, 'SMF', 'SMF.C.01', 'SA_MeanPduSession', '\'SMF.01\'', ' ', 'Active', '', 'admin', '2024-12-12 19:32:45');
|
||||
INSERT INTO `kpi_c_title` VALUES (6, 'SMF', 'SMF.C.02', 'PDU Session Establishment Success Rate', '(\'SMF.02\'/\'SMF.03\')*100', '%', 'Active', '', 'admin', '2024-12-12 19:33:27');
|
||||
INSERT INTO `kpi_c_title` VALUES (7, 'SMF', 'SMF.C.03', 'IMS Session Establishment Success Rate', '(\'SMF.04\'/\'SMF.05\')*100', '%', 'Active', '', 'admin', '2024-12-12 19:34:07');
|
||||
INSERT INTO `kpi_c_title` VALUES (8, 'MME', 'MME.C.01', 'Attach Success Rate ', '(\'MME.A.02\'/\'MME.A.01\')*100', '%', 'Active', '', 'admin', '2024-12-12 20:26:09');
|
||||
INSERT INTO `kpi_c_title` VALUES (8, 'MME', 'MME.C.01', 'Attach Success Rate ', '(\'MME.A.05\'/\'MME.A.04\')*100', '%', 'Active', '', 'admin', '2024-12-12 20:26:09');
|
||||
INSERT INTO `kpi_c_title` VALUES (9, 'UPF', 'UPF.C.01', 'PFCP Establish Success Rate ', '(\'UPF.01\'/\'UPF.02\')*100', '%', 'Active', '', 'admin', '2024-12-12 20:26:40');
|
||||
INSERT INTO `kpi_c_title` VALUES (10, 'UPF', 'UPF.C.02', 'N6_Uplink_Throughout', '(\'UPF.03\')*8/5/1000/1000', 'Mbps', 'Active', '', 'admin', '2025-01-20 09:26:06');
|
||||
INSERT INTO `kpi_c_title` VALUES (11, 'UPF', 'UPF.C.03', 'N3_Uplink_Throughout', '(\'UPF.06\')*8/5/1000/1000', 'Mbps', 'Active', '', 'admin', '2025-01-20 09:26:57');
|
||||
@@ -38,7 +38,7 @@ INSERT INTO `kpi_c_title` VALUES (15, 'IMS', 'IMS.C.02', 'MO_Success_Rate', '(\'
|
||||
INSERT INTO `kpi_c_title` VALUES (16, 'IMS', 'IMS.C.03', 'MT_Success_Rate', '(\'SCSCF.07\'/\'SCSCF.08\')*100', '%', 'Active', '', 'admin', '2024-12-12 20:30:49');
|
||||
INSERT INTO `kpi_c_title` VALUES (17, 'IMS', 'IMS.C.04', 'Service_Success_Rate ', '((\'SCSCF.05\'+\'SCSCF.07\')/(\'SCSCF.06\'+\'SCSCF.08\'))*100', '%', 'Active', '', 'admin', '2024-12-12 20:31:41');
|
||||
INSERT INTO `kpi_c_title` VALUES (18, 'SMF', 'SMF.C.06', 'IMS_DefaultBear_Success_Rate ', '(\'SMF.13\'/\'SMF.14\')*100', '%', 'Active', '', 'admin', '2024-12-13 10:49:00');
|
||||
INSERT INTO `kpi_c_title` VALUES (19, 'SMF', 'SMF.C.07', 'Bear_Success_Rate_new', '((\'SMF.09\'+\'SMF.11\')/(\'SMF.10\'+\'SMF.12\') )*100', '%', 'Active', '', 'admin', '2024-12-13 11:16:04');
|
||||
INSERT INTO `kpi_c_title` VALUES (19, 'SMF', 'SMF.C.07', 'Bear_Success_Rate_new', '((\'SMF.09\'+\'SMF.11\')/(\'SMF.10\'+\'SMF.12\') )*100', '%', 'Deleted', '', 'admin', '2024-12-13 11:16:04');
|
||||
INSERT INTO `kpi_c_title` VALUES (22, 'UPF', 'UPF.C.06', 'N3_Downlink_Throughout', '(\'UPF.05\')*8/5/1000/1000', 'Mbps', 'Active', '', 'admin', '2025-01-15 02:53:32');
|
||||
INSERT INTO `kpi_c_title` VALUES (23, 'UPF', 'UPF.C.07', 'N6_Downlink_Throughout', '(\'UPF.04\')*8/5/1000/1000', 'Mbps', 'Active', '', 'admin', '2025-01-15 02:53:32');
|
||||
|
||||
|
||||
@@ -42,7 +42,7 @@ INSERT INTO `sys_config` VALUES (108, 'config.sys.i18nOpen', 'sys.i18n.open', 't
|
||||
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');
|
||||
INSERT INTO `sys_config` VALUES (111, 'config.sys.homePage', 'sys.homePage', 'configManage/neOverview/index', 'Y', 'supervisor', 1704960008300, 'admin', 1706838764703, 'config.sys.homePageRemark');
|
||||
INSERT INTO `sys_config` VALUES (112, 'config.sys.exportTable', 'sys.exportTable', '43t6VAMQmdnt9ynWGJIR1ufeQOvr1doHDsjWUFT8JVzxTVEYgZ1Xvrk47JaPeCHMPKk9zLhJCU9MmA7JAWslQyWBLHzVOMUmA1ppIL1sVIkWGrdDiw0XuMdvXpUu/adrXHhqo42NP3hxcvwXvkWvgedezzCnUsvqfMt+Yw1Wick=', 'Y', 'supervisor', 1737355823940, 'supervisor', 1737363302083, 'config.sys.exportTableRemark');
|
||||
INSERT INTO `sys_config` VALUES (112, 'config.sys.exportTable', 'sys.exportTable', 'B1n9hW6Z2S2wZw4MVPAX6Q4wCuyWKdMk+qH1ZKqpLJxwvq2FBRgAT6WWw+j6O+ExHIJhpJ3XCpMBoiNN/RkW6EPurmqM82gnXWUIf/s6gk7OWrhdvQDD2jjNVBkLCmPLEH3ZLdgnQOZOePA7WyUdXA==', 'Y', 'supervisor', 1737355823940, 'supervisor', 1737363302083, 'config.sys.exportTableRemark');
|
||||
|
||||
UNLOCK TABLES;
|
||||
|
||||
|
||||
@@ -168,5 +168,24 @@ INSERT INTO `sys_dict_data` VALUES (140, 21, 'dictData.cdr_cause_code.41', '41',
|
||||
INSERT INTO `sys_dict_data` VALUES (141, 22, 'dictData.cdr_cause_code.42', '42', 'cdr_cause_code', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (142, 23, 'dictData.cdr_cause_code.47', '47', 'cdr_cause_code', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (143, 30, 'dictData.cdr_cause_code.50', '50', 'cdr_cause_code', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (144, 1, 'dictData.trace_msg_type.0', '0', 'trace_msg_type', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (145, 2, 'dictData.trace_msg_type.1', '1', 'trace_msg_type', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (146, 1, 'dictData.trace_msg_direct.0', '0', 'trace_msg_direct', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (147, 2, 'dictData.trace_msg_direct.1', '1', 'trace_msg_direct', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (148, 1, 'dictData.trace_interfaces.1', 'N1', 'trace_interfaces', '', '', '0', 'supervisor', 1712720201349, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (149, 2, 'dictData.trace_interfaces.2', 'N2', 'trace_interfaces', '', '', '0', 'supervisor', 1712720201349, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (150, 3, 'dictData.trace_interfaces.3', 'N1/N2', 'trace_interfaces', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (151, 4, 'dictData.trace_interfaces.4', 'N4', 'trace_interfaces', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (152, 8, 'dictData.trace_interfaces.8', 'N8', 'trace_interfaces', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (153, 10, 'dictData.trace_interfaces.10', 'N10', 'trace_interfaces', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (154, 11, 'dictData.trace_interfaces.11', 'N11', 'trace_interfaces', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (155, 12, 'dictData.trace_interfaces.12', 'N12', 'trace_interfaces', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (156, 13, 'dictData.trace_interfaces.13', 'N13', 'trace_interfaces', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (157, 7, 'dictData.trace_interfaces.7', 'N7', 'trace_interfaces', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (158, 15, 'dictData.trace_interfaces.15', 'N15', 'trace_interfaces', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (159, 17, 'dictData.trace_interfaces.17', 'N17', 'trace_interfaces', '', '', '0', 'supervisor', 1712720201349, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (160, 20, 'dictData.trace_interfaces.20', 'N20', 'trace_interfaces', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (161, 22, 'dictData.trace_interfaces.22', 'N22', 'trace_interfaces', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (162, 40, 'dictData.trace_interfaces.40', 'N40', 'trace_interfaces', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
|
||||
|
||||
SET FOREIGN_KEY_CHECKS = 1;
|
||||
|
||||
@@ -79,7 +79,7 @@ INSERT INTO `sys_dict_data` VALUES (1071, 1071, 'menu.ueUser.onlineUE', 'UE在
|
||||
INSERT INTO `sys_dict_data` VALUES (1072, 1072, 'menu.ueUser.base5G', '基站信息', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
|
||||
INSERT INTO `sys_dict_data` VALUES (1073, 1073, 'menu.trace', '跟踪', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
|
||||
INSERT INTO `sys_dict_data` VALUES (1074, 1074, 'menu.trace.task', '网元跟踪任务', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
|
||||
INSERT INTO `sys_dict_data` VALUES (1075, 1075, 'menu.trace.analysis', '网元跟踪数据', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
|
||||
INSERT INTO `sys_dict_data` VALUES (1075, 1075, 'menu.trace.taskData', '网元跟踪任务数据', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
|
||||
INSERT INTO `sys_dict_data` VALUES (1076, 1076, 'menu.trace.pcap', '信令抓包', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
|
||||
INSERT INTO `sys_dict_data` VALUES (1077, 1077, 'menu.fault', '监控', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
|
||||
INSERT INTO `sys_dict_data` VALUES (1078, 1078, 'config.sys.exportTable', '备份文件FTP服务', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
|
||||
@@ -89,7 +89,7 @@ INSERT INTO `sys_dict_data` VALUES (1081, 1081, 'menu.ueUser.onlineUERemark', 'U
|
||||
INSERT INTO `sys_dict_data` VALUES (1082, 1082, 'menu.ueUser.base5GRemark', '5G基站信息菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
|
||||
INSERT INTO `sys_dict_data` VALUES (1083, 1083, 'menu.traceRemark', '跟踪管理目录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
|
||||
INSERT INTO `sys_dict_data` VALUES (1084, 1084, 'menu.trace.taskRemark', '跟踪任务菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
|
||||
INSERT INTO `sys_dict_data` VALUES (1085, 1085, 'menu.trace.analysisRemark', '信令分析菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
|
||||
-- INSERT INTO `sys_dict_data` VALUES (1085, 1085, 'menu.trace.analysisRemark', '信令分析菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
|
||||
INSERT INTO `sys_dict_data` VALUES (1086, 1086, 'menu.trace.pcapRemark', '信令抓包菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
|
||||
INSERT INTO `sys_dict_data` VALUES (1087, 1087, 'menu.faultRemark', '故障管理目录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
|
||||
INSERT INTO `sys_dict_data` VALUES (1088, 1088, 'menu.fault.active', '活动告警', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
|
||||
@@ -656,7 +656,7 @@ INSERT INTO `sys_dict_data` VALUES (2145, 2145, 'menu.system.user.editPost', '
|
||||
INSERT INTO `sys_dict_data` VALUES (2146, 2146, 'menu.dashboard.smscCDR', '短信话单', 'i18n_zh', '', '', '1', 'supervisor', 1717051745866, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (2147, 2147, 'log.operate.title.smscCDR', '短信话单', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (2148, 2148, 'menu.trace.pcapFile', '信令抓包文件', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (2149, 2149, 'menu.trace.taskAnalyze', '跟踪数据分析', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (2149, 2149, 'menu.trace.taskAnalyze', '网元跟踪任务分析', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (2150, 2150, 'job.ne_data_udm', '网元数据-UDM数据刷新同步', 'i18n_zh', '', '', '1', 'supervisor', 1730173767412, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (2151, 2151, 'menu.system.setting.doc', '系统使用文档', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (2152, 2152, 'menu.system.setting.official', '官网链接', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, '');
|
||||
@@ -695,5 +695,43 @@ INSERT INTO `sys_dict_data` VALUES (2184, 2184, 'config.sys.homePage', '自定
|
||||
INSERT INTO `sys_dict_data` VALUES (2185, 2185, 'config.sys.homePageRemark', '选择列表中的任一页面作为主页路径', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (2186, 2186, 'menu.config.neOverview', '网元概览', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (2187, 2187, 'menu.config.neOverviewRemark', '显示所有网元状态配置和license等概览信息', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (2188, 2188, 'job.exportSGWCCDR', '定期从漫游数据话单表导出文件至指定目录', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (2189, 2189, 'table.cdr_event_sgwc', '漫游数据话单', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (2190, 2190, 'menu.dashboard.overview.smfUeNum', '展示数据会话数', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (2191, 2191, 'menu.dashboard.overview.imsUeNum', '展示语音会话数', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (2192, 2192, 'menu.dashboard.overview.gnbBase', '展示5G基站在线信息', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (2193, 2193, 'menu.dashboard.overview.enbBase', '展示4G基站在线信息', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (2194, 2194, 'menu.ueUser.imsUDM', 'IMS签约用户', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (2195, 2195, 'menu.ueUser.imsUDMRemark', 'IMS签约用户菜单', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (2196, 2196, 'menu.ueUser.voipUDM', 'VoIP鉴权数据', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (2197, 2197, 'menu.ueUser.voipUDMRemark', 'VoIP鉴权数据菜单', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (2198, 2198, 'menu.ueUser.exportFile', '文件管理', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (2199, 2199, 'menu.ueUser.exportFileRemark', '文件管理菜单', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (2200, 2200, 'job.backup.ue.data', '定期备份UE用户和数据表', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (2201, 2201, 'table.u_auth_user', 'UDM鉴权用户', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (2202, 2202, 'table.u_sub_user', 'UDM签约用户', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (2203, 2203, 'table.u_voip_auth', 'VoIP鉴权数据', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (2204, 2204, 'table.u_ims_user', 'IMS签约用户', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (2205, 2205, 'dictType.trace_msg_type', '跟踪消息类型', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (2206, 2206, 'dictData.trace_msg_type.0', '请求', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (2207, 2207, 'dictData.trace_msg_type.1', '响应', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (2208, 2208, 'dictType.trace_msg_direct', '跟踪消息方向', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (2209, 2209, 'dictData.trace_msg_direct.0', '接收', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (2210, 2210, 'dictData.trace_msg_direct.1', '发送', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (2211, 2211, 'dictData.trace_interfaces.1', 'N1', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (2212, 2212, 'dictData.trace_interfaces.2', 'N2', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (2213, 2213, 'dictData.trace_interfaces.3', 'N1/N2', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (2214, 2214, 'dictData.trace_interfaces.4', 'N4', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (2215, 2215, 'dictData.trace_interfaces.8', 'N8', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (2216, 2216, 'dictData.trace_interfaces.10', 'N10', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (2217, 2217, 'dictData.trace_interfaces.11', 'N11', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (2218, 2218, 'dictData.trace_interfaces.12', 'N12', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (2219, 2219, 'dictData.trace_interfaces.13', 'N13', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (2220, 2220, 'dictData.trace_interfaces.7', 'N7', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (2221, 2221, 'dictData.trace_interfaces.15', 'N15', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (2222, 2222, 'dictData.trace_interfaces.17', 'N17', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (2223, 2223, 'dictData.trace_interfaces.20', 'N20', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (2224, 2224, 'dictData.trace_interfaces.22', 'N22', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (2225, 2225, 'dictData.trace_interfaces.40', 'N40', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
|
||||
SET FOREIGN_KEY_CHECKS = 1;
|
||||
|
||||
@@ -79,7 +79,7 @@ INSERT INTO `sys_dict_data` VALUES (3071, 3071, 'menu.ueUser.onlineUE', 'UE Onli
|
||||
INSERT INTO `sys_dict_data` VALUES (3072, 3072, 'menu.ueUser.base5G', 'Radio Information', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
|
||||
INSERT INTO `sys_dict_data` VALUES (3073, 3073, 'menu.trace', 'Trace', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
|
||||
INSERT INTO `sys_dict_data` VALUES (3074, 3074, 'menu.trace.task', 'NE Trace Task', 'i18n_en', '', '', '1', 'supervisor', 1700000000000, NULL, 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (3075, 3075, 'menu.trace.analysis', 'NE Trace Task Data', 'i18n_en', '', '', '1', 'supervisor', 1700000000000, NULL, 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (3075, 3075, 'menu.trace.taskData', 'NE Trace Task Data', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
|
||||
INSERT INTO `sys_dict_data` VALUES (3076, 3076, 'menu.trace.pcap', 'Signaling Capture', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
|
||||
INSERT INTO `sys_dict_data` VALUES (3077, 3077, 'menu.fault', 'Monitor', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
|
||||
INSERT INTO `sys_dict_data` VALUES (3078, 3078, 'config.sys.exportTable', 'Backup file FTP service', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
|
||||
@@ -89,7 +89,7 @@ INSERT INTO `sys_dict_data` VALUES (3081, 3081, 'menu.ueUser.onlineUERemark', 'U
|
||||
INSERT INTO `sys_dict_data` VALUES (3082, 3082, 'menu.ueUser.base5GRemark', '5G Base Station Information Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
|
||||
INSERT INTO `sys_dict_data` VALUES (3083, 3083, 'menu.traceRemark', 'Tracking Management Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
|
||||
INSERT INTO `sys_dict_data` VALUES (3084, 3084, 'menu.trace.taskRemark', 'Tracking Task Menu', 'i18n_en', '', '', '1', 'supervisor', 1700000000000, NULL, 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (3085, 3085, 'menu.trace.analysisRemark', 'Signaling Analysis Menu', 'i18n_en', '', '', '1', 'supervisor', 1700000000000, NULL, 0, '');
|
||||
-- INSERT INTO `sys_dict_data` VALUES (3085, 3085, 'menu.trace.analysisRemark', 'Signaling Analysis Menu', 'i18n_en', '', '', '1', 'supervisor', 1700000000000, NULL, 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (3086, 3086, 'menu.trace.pcapRemark', 'Signaling Capture Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
|
||||
INSERT INTO `sys_dict_data` VALUES (3087, 3087, 'menu.faultRemark', 'Fault Management Catalog', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
|
||||
INSERT INTO `sys_dict_data` VALUES (3088, 3088, 'menu.fault.active', 'Active Alarms', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
|
||||
@@ -656,7 +656,7 @@ INSERT INTO `sys_dict_data` VALUES (4145, 4145, 'menu.system.user.editPost', 'Mo
|
||||
INSERT INTO `sys_dict_data` VALUES (4146, 4146, 'menu.dashboard.smscCDR', 'SMS CDR', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (4147, 4147, 'log.operate.title.smscCDR', 'SMS CDR', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (4148, 4148, 'menu.trace.pcapFile', 'Signaling Capture File', 'i18n_en', '', '', '1', 'supervisor', 1718441035866, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (4149, 4149, 'menu.trace.taskAnalyze', 'Tracking Data Analysis', 'i18n_en', '', '', '1', 'supervisor', 1718441035866, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (4149, 4149, 'menu.trace.taskAnalyze', 'NE Trace Task Analysis', 'i18n_en', '', '', '1', 'supervisor', 1718441035866, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (4150, 4150, 'job.ne_data_udm', 'NE Data Sync UDM', 'i18n_en', '', '', '1', 'supervisor', 1730173767412, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (4151, 4151, 'menu.system.setting.doc', 'System User Documentation', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (4152, 4152, 'menu.system.setting.official', 'Official Website', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, '');
|
||||
@@ -695,5 +695,43 @@ INSERT INTO `sys_dict_data` VALUES (4184, 4184, 'config.sys.homePage', 'Custom H
|
||||
INSERT INTO `sys_dict_data` VALUES (4185, 4185, 'config.sys.homePageRemark', 'Select any page in the list as the homepage', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (4186, 4186, 'menu.config.neOverview', 'NE Overview', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (4187, 4187, 'menu.config.neOverviewRemark', 'Displays overview information such as status, configuration and license of all network elements', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (4188, 4188, 'job.exportSGWCCDR', 'Export regularly from Roaming Data CDR table', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (4189, 4189, 'table.cdr_event_sgwc', 'Roaming Data CDR', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (4190, 4190, 'menu.dashboard.overview.smfUeNum', 'Display data session number', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (4191, 4191, 'menu.dashboard.overview.imsUeNum', 'Display the number of voice sessions', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (4192, 4192, 'menu.dashboard.overview.gnbBase', 'Display 5G base station online information', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (4193, 4193, 'menu.dashboard.overview.enbBase', 'Display 4G base station online information', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (4194, 4194, 'menu.ueUser.imsUDM', 'IMS Subscribers', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (4195, 4195, 'menu.ueUser.imsUDMRemark', 'IMS Subscribers Menu', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (4196, 4196, 'menu.ueUser.voipUDM', 'VoIP Authentication', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (4197, 4197, 'menu.ueUser.voipUDMRemark', 'VoIP Authentication Menu', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (4198, 4198, 'menu.ueUser.exportFile', 'File Management', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (4199, 4199, 'menu.ueUser.exportFileRemark', 'File Management Menu', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (4200, 4200, 'job.backup.ue.data', 'Backup regularly UE users and data tables', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (4201, 4201, 'table.u_auth_user', 'UDM Authentication', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (4202, 4202, 'table.u_sub_user', 'UDM Subscribers', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (4203, 4203, 'table.u_voip_auth', 'VoIP Authentication', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (4204, 4204, 'table.u_ims_user', 'IMS Subscribers', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (4205, 4205, 'dictType.trace_msg_type', 'Trace Message Type', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (4206, 4206, 'dictData.trace_msg_type.0', 'Request', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (4207, 4207, 'dictData.trace_msg_type.1', 'Response', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (4208, 4208, 'dictType.trace_msg_direct', 'Track Message Directio', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (4209, 4209, 'dictData.trace_msg_direct.0', 'Receive', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (4210, 4210, 'dictData.trace_msg_direct.1', 'Send', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (4211, 4211, 'dictData.trace_interfaces.1', 'N1', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (4212, 4212, 'dictData.trace_interfaces.2', 'N2', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (4213, 4213, 'dictData.trace_interfaces.3', 'N1/N2', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (4214, 4214, 'dictData.trace_interfaces.4', 'N4', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (4215, 4215, 'dictData.trace_interfaces.8', 'N8', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (4216, 4216, 'dictData.trace_interfaces.10', 'N10', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (4217, 4217, 'dictData.trace_interfaces.11', 'N11', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (4218, 4218, 'dictData.trace_interfaces.12', 'N12', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (4219, 4219, 'dictData.trace_interfaces.13', 'N13', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (4220, 4220, 'dictData.trace_interfaces.7', 'N7', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (4221, 4221, 'dictData.trace_interfaces.15', 'N15', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (4222, 4222, 'dictData.trace_interfaces.17', 'N17', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (4223, 4223, 'dictData.trace_interfaces.20', 'N20', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (4224, 4224, 'dictData.trace_interfaces.22', 'N22', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_dict_data` VALUES (4225, 4225, 'dictData.trace_interfaces.40', 'N40', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
|
||||
SET FOREIGN_KEY_CHECKS = 1;
|
||||
|
||||
@@ -56,6 +56,9 @@ INSERT INTO `sys_dict_type` VALUES (121, 'dictType.ne_host_cmd_groupId', 'ne_hos
|
||||
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.cdr_cause_code', 'cdr_cause_code', '1', 'supervisor', 1725877564156, '', 0, '');
|
||||
INSERT INTO `sys_dict_type` VALUES (125, 'dictType.trace_msg_type', 'trace_msg_type', '1', 'system', 1699348237468, 'system', 1699348237468, '');
|
||||
INSERT INTO `sys_dict_type` VALUES (126, 'dictType.trace_msg_direct', 'trace_msg_direct', '1', 'system', 1699348237468, 'system', 1699348237468, '');
|
||||
INSERT INTO `sys_dict_type` VALUES (127, 'dictType.trace_interfaces', 'trace_interfaces', '1', 'system', 1699348237468, 'system', 1699348237468, '');
|
||||
|
||||
UNLOCK TABLES;
|
||||
|
||||
|
||||
@@ -37,11 +37,12 @@ INSERT INTO `sys_job` VALUES (6, 'job.deleteExpiredKpiRecord', 'SYSTEM', 'delete
|
||||
INSERT INTO `sys_job` VALUES (7, 'job.backupEtcFromNE', 'SYSTEM', 'backupEtcFromNE', NULL, '0 30 0 * * ?', '3', '0', '0', '1', 'supervisor', 1698478134843, NULL, 0, 'job.backupEtcFromNERemark');
|
||||
INSERT INTO `sys_job` VALUES (8, 'job.deleteExpiredNeStateRecord', 'SYSTEM', 'deleteExpiredRecord', '{\"duration\":1,\"tableName\":\"ne_state\",\"colName\":\"timestamp\"}', '0 25 0 * * ?', '3', '0', '1', '1', 'supervisor', 1698478134842, 'admin', 1703668901929, 'job.deleteExpiredNeStateRecordRemark');
|
||||
INSERT INTO `sys_job` VALUES (9, 'job.getStateFromNE', 'SYSTEM', 'getStateFromNE', '', '0/10 * * * * ?', '3', '0', '0', '0', 'supervisor', 1698478134842, 'admin', 1713231120503, 'job.getStateFromNERemark');
|
||||
INSERT INTO `sys_job` 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', '0', '0', 'supervisor', 1698478134842, 'admin', 1713781643031, 'job.genNeStateAlarmRemark');
|
||||
INSERT INTO `sys_job` 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', 1713781643031, 'job.genNeStateAlarmRemark');
|
||||
INSERT INTO `sys_job` VALUES (11, 'job.exportOperateLog', 'SYSTEM', 'exportTable', '{\"duration\":1,\"tableName\":\"sys_log_operate\",\"timeCol\":\"oper_time\",\"timeUnit\":\"milli\",\"columns\":\"oper_id,omc_get_dict_value(title, \\\"i18n_en\\\") as title,business_type,method,request_method,operator_type,oper_name,dept_name,oper_url,oper_ip,oper_location,oper_param,oper_msg,status,oper_time,cost_time\",\"extras\":\"\",\"filePath\":\"/usr/local/omc/backup/operate_log\"}', '0 0 0/1 * * ?', '3', '0', '1', '1', 'supervisor', 1698478134842, 'admin', 1724833786290, 'job.exportOperateLog');
|
||||
INSERT INTO `sys_job` VALUES (12, 'job.exportIMSCDR', 'SYSTEM', 'exportTable', '{\"duration\":1,\"tableName\":\"cdr_event_ims\",\"columns\":\"id,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.recordType\')) as record_type,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.callType\')) as call_type,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.callerParty\')) as caller_party,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.calledParty\')) as called_party,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.callDuration\')) as call_duration,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.serviceResult\')) as service_result,DATE_FORMAT(FROM_UNIXTIME(timestamp), \'%Y-%m-%d %H:%i:%s\') AS timestamp\",\"timeCol\":\"timestamp\",\"timeUnit\":\"second\",\"extras\":\"\",\"filePath\":\"/usr/local/omc/backup/ims_cdr\"}', '0 0 0/1 * * ?', '3', '0', '1', '1', 'supervisor', 1698478134842, 'admin', 1722224659251, '');
|
||||
INSERT INTO `sys_job` VALUES (13, 'job.exportSMFCDR', 'SYSTEM', 'exportTable', '{\"duration\":1,\"tableName\":\"cdr_event_smf\",\"columns\":\"id,ne_type,ne_name,rm_uid,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.recordType\')) AS record_type,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.chargingID\')) AS charging_id,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.subscriberIdentifier.subscriptionIDType\')) AS subscriber_id_type,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.subscriberIdentifier.subscriptionIDData\')) AS subscriber_id_data,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.duration\')) AS duration,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.invocationTimestamp\')) as invocationTimestamp,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.listOfMultipleUnitUsage[*].usedUnitContainer[*].dataVolumeUplink\')) AS data_volume_uplink,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.listOfMultipleUnitUsage[*].usedUnitContainer[*].dataVolumeDownlink\')) AS data_volume_downlink,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.listOfMultipleUnitUsage[*].usedUnitContainer[*].dataTotalVolume\')) AS data_total_volume,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.pDUSessionChargingInformation.pDUAddress.pDUIPv4Address\')) AS pdu_ipv4_address,timestamp\",\"timeCol\":\"timestamp\",\"timeUnit\":\"second\",\"extras\":\"\",\"filePath\":\"/usr/local/omc/backup/smf_cdr\"}', '0 0 0/1 * * ?', '3', '0', '1', '1', 'supervisor', 1698478134842, 'admin', 1724309047797, '');
|
||||
INSERT INTO `sys_job` VALUES (14, 'job.exportSMSCCDR', 'SYSTEM', 'exportTable', '{\"duration\":1,\"tableName\":\"cdr_event_smsc\",\"columns\":\"id,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.recordType\')) as record_type,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.serviceType\')) as service_type,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.callerParty\')) as caller_party,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.calledParty\')) as called_party,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.result\')) as result,DATE_FORMAT(FROM_UNIXTIME(JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.updateTime\'))), \'%Y-%m-%d %H:%i:%s\') as update_time\",\"timeCol\":\"timestamp\",\"timeUnit\":\"second\",\"extras\":\"\",\"filePath\":\"/usr/local/omc/backup/smsc_cdr\"}', '0 0 0/1 * * ?', '3', '0', '1', '1', 'supervisor', 1698478134842, 'admin', 1724309047797, '');
|
||||
INSERT INTO `sys_job` VALUES (14, 'job.exportSMSCCDR', 'SYSTEM', 'exportTable', '{\"duration\":1,\"tableName\":\"cdr_event_smsc\",\"columns\":\"id,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.recordType\')) as record_type,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.serviceType\')) as service_type,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.callerParty\')) as caller_party,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.calledParty\')) as called_party,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.result\')) as result,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.updateTime\')) as update_time\",\"timeCol\":\"timestamp\",\"timeUnit\":\"second\",\"extras\":\"\",\"filePath\":\"/usr/local/omc/backup/smsc_cdr\"}', '0 0 0/1 * * ?', '3', '0', '1', '1', 'supervisor', 1698478134842, 'admin', 1724309047797, '');
|
||||
INSERT INTO `sys_job` VALUES (15, 'job.removeExportedFiles', 'SYSTEM', 'removeFile', '[{\"filePath\":\"/usr/local/omc/backup/operate_log\",\"maxDays\":30},{\"filePath\":\"/usr/local/omc/backup/ims_cdr\",\"maxDays\":30},{\"filePath\":\"/usr/local/omc/backup/smf_cdr\",\"maxDays\":30},{\"filePath\":\"/usr/local/omc/backup/smsc_cdr\",\"maxDays\":30}]', '0 10 0 * * ?', '3', '0', '1', '1', 'supervisor', 1698478134842, 'admin', 1728634085631, '');
|
||||
INSERT INTO `sys_job` VALUES (16, 'job.exportSGWCCDR', 'SYSTEM', 'exportTable', '{\"duration\":1,\"tableName\":\"cdr_event_sgwc\",\"columns\":\"id,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.recordType\')) as recordType,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.accessPointNameNI\')) as accessPointNameNI,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.servedIMSI\')) as IMSI,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.servedMSISDN\')) as MSISDN,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.servedPDPPDNAddress\')) as PdpAddress,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.duration\')) as duration,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.recordOpeningTime\')) as recordOpeningTime,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.chargingID\')) as chargingID,JSON_UNQUOTE(JSON_EXTRACT(cdr_json, \'$.listOfTrafficVolumes[0].dataVolumeGPRSDownlink\')) AS dataVolumeGPRSDownlink,JSON_UNQUOTE(JSON_EXTRACT(cdr_json, \'$.listOfTrafficVolumes[0].dataVolumeGPRsUplink\')) as dataVolumeGPRsUplink,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.userLocationInformation.tai.tac\')) as tac,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.userLocationInformation.ecgi.eutraCellId\')) as cellID\",\"timeCol\":\"timestamp\",\"timeUnit\":\"second\",\"extras\":\"\",\"filePath\":\"/usr/local/omc/backup/sgwc_cdr\"}', '0 0 0/1 * * ?', '3', '0', '1', '1', 'supervisor', 1698478134842, 'admin', 1724309047797, '');
|
||||
|
||||
SET FOREIGN_KEY_CHECKS = 1;
|
||||
|
||||
@@ -136,8 +136,8 @@ INSERT INTO `sys_menu` VALUES (2080, 'menu.ueUser.onlineIMS', 5, 4, 'ims', 'neUs
|
||||
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', '0', '1', 'neUser:base5G:index', 'icon-paixu', 'supervisor', 1700000000000, NULL, 0, 'menu.ueUser.base5GRemark');
|
||||
INSERT INTO `sys_menu` VALUES (2083, 'menu.trace', 2087, 30, 'traceManage', NULL, '1', '0', 'D', '1', '1', NULL, 'icon-paixu', 'supervisor', 1700000000000, NULL, 0, 'menu.traceRemark');
|
||||
INSERT INTO `sys_menu` VALUES (2084, 'menu.trace.task', 2083, 1, 'task', 'traceManage/task/index', '1', '0', 'M', '0', '1', 'traceManage:task:index', 'icon-chexiao', 'supervisor', 1700000000000, 'admin', 1713176976458, 'menu.trace.taskRemark');
|
||||
INSERT INTO `sys_menu` VALUES (2085, 'menu.trace.analysis', 2083, 4, 'analysis', 'traceManage/analysis/index', '1', '0', 'M', '0', '1', 'traceManage:analysis:index', 'icon-gongnengjieshao', 'supervisor', 1700000000000, 'admin', 1713176987835, 'menu.trace.analysisRemark');
|
||||
INSERT INTO `sys_menu` VALUES (2084, 'menu.trace.task', 2083, 1, 'task', 'traceManage/task/index', '1', '0', 'M', '1', '1', 'traceManage:task:index', 'icon-chexiao', 'supervisor', 1700000000000, 'admin', 1744453890548, 'menu.trace.taskRemark');
|
||||
INSERT INTO `sys_menu` VALUES (2085, 'menu.trace.taskData', 2083, 4, 'task/inline/data', 'traceManage/task/data', '1', '0', 'M', '0', '1', 'traceManage:task:data', '#', 'supervisor', 1700000000000, 'admin', 1744453921381, '');
|
||||
INSERT INTO `sys_menu` VALUES (2086, 'menu.trace.pcap', 2083, 11, 'pcap', 'traceManage/pcap/index', '1', '1', 'M', '1', '1', 'traceManage:pcap:index', 'icon-soutubiao', 'supervisor', 1700000000000, NULL, 0, 'menu.trace.pcapRemark');
|
||||
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');
|
||||
@@ -210,9 +210,13 @@ INSERT INTO `sys_menu` VALUES (2158, 'menu.trace.pcapFile', 2083, 12, 'pcap/inli
|
||||
INSERT INTO `sys_menu` VALUES (2159, 'menu.log.exportFile', 2089, 100, 'exportFile', 'logManage/exportFile/index', '1', '1', 'M', '1', '1', 'logManage:exportFile:index', 'icon-wenjian', 'supervisor', 1724144595914, '', 0, '');
|
||||
INSERT INTO `sys_menu` VALUES (2160, 'menu.perf.kpiCReport', 2099, 100, 'kpiCReport', 'perfManage/kpiCReport/index', '1', '0', 'M', '1', '1', 'perfManage:kpiCReport:index', 'icon-tubiaoku', 'supervisor', 1724144595914, '', 0, '');
|
||||
INSERT INTO `sys_menu` VALUES (2161, 'menu.trace.taskHLR', 2083, 6, 'taskHLR', 'traceManage/task-hlr/index', '1', '0', 'M', '0', '1', 'traceManage:taskHLR:index', 'icon-chexiao', 'supervisor', 1724144595914, '', 0, '');
|
||||
INSERT INTO `sys_menu` VALUES (2162, 'menu.trace.taskAnalyze', 2083, 2, 'task/inline/analyze', 'traceManage/task/analyze', '1', '0', 'M', '0', '1', 'traceManage:taskAnalyze:index', '#', 'supervisor', 1724144595914, '', 0, '');
|
||||
INSERT INTO `sys_menu` VALUES (2162, 'menu.trace.taskAnalyze', 2083, 2, 'task/inline/analyze', 'traceManage/task/analyze', '1', '0', 'M', '0', '1', 'traceManage:task:analyze', '#', 'supervisor', 1724144595914, '', 0, '');
|
||||
INSERT INTO `sys_menu` VALUES (2163, 'menu.trace.tshark', 2083, 14, 'tshark', 'traceManage/tshark/index', '1', '0', 'M', '1', '1', 'traceManage:tshark:index', 'icon-gengduo', 'supervisor', 1724144595914, '', 0, '');
|
||||
INSERT INTO `sys_menu` VALUES (2164, 'menu.trace.wireshark', 2083, 16, 'wireshark', 'traceManage/wireshark/index', '1', '0', 'M', '1', '1', 'traceManage:wireshark:index', 'icon-gengduo', 'supervisor', 1724144595914, '', 0, '');
|
||||
INSERT INTO `sys_menu` VALUES (2165, 'menu.config.neOverview', 4, 1, 'neOverview', 'configManage/neOverview/index', '1', '0', 'M', '1', '1', 'configManage:neOverview:index', 'icon-tubiaoku', 'supervisor', 1700000000000, NULL, 0, 'menu.config.neOverviewRemark');
|
||||
INSERT INTO `sys_menu` VALUES (2166, 'menu.dashboard.overview.smfUeNum', 2132, 2, '#', '', '1', '1', 'B', '1', '1', 'dashboard:overview:smfUeNum', '#', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_menu` VALUES (2167, 'menu.dashboard.overview.imsUeNum', 2132, 4, '#', '', '1', '1', 'B', '1', '1', 'dashboard:overview:imsUeNum', '#', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_menu` VALUES (2168, 'menu.dashboard.overview.gnbBase', 2132, 6, '#', '', '1', '1', 'B', '1', '1', 'dashboard:overview:gnbBase', '#', 'supervisor', 1721902269805, '', 0, '');
|
||||
INSERT INTO `sys_menu` VALUES (2169, 'menu.dashboard.overview.enbBase', 2132, 8, '#', '', '1', '1', 'B', '1', '1', 'dashboard:overview:enbBase', '#', 'supervisor', 1721902269805, '', 0, '');
|
||||
|
||||
SET FOREIGN_KEY_CHECKS = 1;
|
||||
|
||||
@@ -22,8 +22,6 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (2, 4);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 5);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 60);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 61);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 63);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 64);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 65);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 66);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 100);
|
||||
@@ -34,7 +32,6 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (2, 104);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 105);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 108);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 111);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 112);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 115);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 116);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 117);
|
||||
@@ -66,20 +63,13 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1022);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1023);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1024);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1030);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1031);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1032);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1033);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1034);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1039);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1040);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1041);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1042);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1043);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1044);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1045);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1048);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1049);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1050);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1051);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1052);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1053);
|
||||
@@ -90,10 +80,8 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2009);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2010);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2080);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2081);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2082);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2083);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2084);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2085);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2086);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2087);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2088);
|
||||
@@ -103,14 +91,10 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2092);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2094);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2096);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2097);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2098);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2099);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2100);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2101);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2102);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2103);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2104);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2105);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2106);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2107);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2108);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2109);
|
||||
@@ -118,17 +102,13 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2111);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2112);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2113);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2114);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2115);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2116);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2117);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2118);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2119);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2120);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2121);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2122);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2123);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2124);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2125);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2126);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2128);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2129);
|
||||
@@ -158,25 +138,22 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2157);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2158);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2159);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2160);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2162);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2163);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2164);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2165);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2166);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2167);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2168);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2169);
|
||||
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 1);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 4);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 5);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 60);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 65);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 66);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 108);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 112);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 115);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 500);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 501);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 1030);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 1031);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 1032);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 1034);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 1039);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 1042);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 1048);
|
||||
@@ -184,7 +161,6 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2009);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2010);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2080);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2081);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2082);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2083);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2086);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2087);
|
||||
@@ -193,15 +169,14 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2089);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2091);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2092);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2094);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2096);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2097);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2107);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2108);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2109);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2111);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2113);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2114);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2115);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2119);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2116);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2120);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2123);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2126);
|
||||
@@ -220,22 +195,21 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2146);
|
||||
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 (3, 2151);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2152);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2153);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2154);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2155);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2156);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2157);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2158);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2165);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2166);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2167);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2168);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2169);
|
||||
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 1);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 4);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 60);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 65);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 66);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 112);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 115);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 500);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 501);
|
||||
@@ -254,7 +228,7 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2092);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2094);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2097);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2113);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2114);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2116);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2126);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2128);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2129);
|
||||
@@ -268,21 +242,18 @@ 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 (4, 2151);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2152);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2153);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2157);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2158);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2163);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2165);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2166);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2167);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2168);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2169);
|
||||
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (5, 1);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (5, 4);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (5, 112);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (5, 2087);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (5, 2115);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (5, 2131);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (5, 2132);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (5, 2165);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (5, 2126);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (5, 2130);
|
||||
|
||||
UNLOCK TABLES;
|
||||
|
||||
|
||||
@@ -5,19 +5,21 @@
|
||||
DROP TABLE IF EXISTS `trace_data`;
|
||||
CREATE TABLE `trace_data` (
|
||||
`id` int NOT NULL AUTO_INCREMENT,
|
||||
`task_id` int NOT NULL COMMENT '跟踪任务ID',
|
||||
`imsi` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '',
|
||||
`msisdn` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '',
|
||||
`src_addr` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '源地址带端口',
|
||||
`dst_addr` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '目标地址带端口',
|
||||
`if_type` int DEFAULT NULL COMMENT '接口类型,未分类',
|
||||
`msg_type` int DEFAULT NULL,
|
||||
`msg_direct` int DEFAULT NULL,
|
||||
`length` int DEFAULT NULL COMMENT '去除头后的原始数据byte长度',
|
||||
`timestamp` bigint DEFAULT '0' COMMENT '毫秒',
|
||||
`raw_msg` text COLLATE utf8mb4_general_ci COMMENT '去除头后的原始数据byteBase64',
|
||||
`dec_msg` text COLLATE utf8mb4_general_ci COMMENT 'TCP内容消息',
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='跟踪_任务数据';
|
||||
`trace_id` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '跟踪任务ID',
|
||||
`imsi` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT 'UE类型 IMSI',
|
||||
`msisdn` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT 'UE类型 可能存在',
|
||||
`src_addr` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '源地址',
|
||||
`dst_addr` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '目标地址',
|
||||
`if_type` varchar(16) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '接口类型,未分类',
|
||||
`msg_type` int DEFAULT NULL COMMENT '消息类型,0-req, 1-rsp',
|
||||
`msg_direct` int DEFAULT NULL COMMENT '消息方向,0-recv,1-send',
|
||||
`msg_ne` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '消息网元',
|
||||
`msg_event` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '消息事件,e.g: CreateContextReq',
|
||||
`length` int DEFAULT NULL COMMENT '原始数据byte长度',
|
||||
`timestamp` bigint DEFAULT '0' COMMENT '纳秒时间戳',
|
||||
`raw_msg` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '原始数据byteBase64',
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
KEY `idx_task_id_time` (`trace_id`,`timestamp`) COMMENT '任务DI时间'
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='跟踪_任务数据';
|
||||
|
||||
-- Dump completed on 2024-09-19 14:26:59
|
||||
-- Dump completed on 2025-04-14 14:26:59
|
||||
|
||||
@@ -6,26 +6,20 @@ DROP TABLE IF EXISTS `trace_task`;
|
||||
CREATE TABLE `trace_task` (
|
||||
`id` int NOT NULL AUTO_INCREMENT COMMENT 'ID',
|
||||
`trace_id` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '任务编号',
|
||||
`trace_type` varchar(2) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '1-Interface,2-Device,3-User',
|
||||
`trace_type` varchar(2) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '1-Interface,2-Device,3-UE',
|
||||
`start_time` bigint DEFAULT '0' COMMENT '开始时间 毫秒',
|
||||
`end_time` bigint DEFAULT '0' COMMENT '结束时间 毫秒',
|
||||
`interfaces` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '接口跟踪必须 例如 N8,N10',
|
||||
`imsi` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '用户跟踪必须',
|
||||
`msisdn` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '用户跟踪可选',
|
||||
`ue_ip` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '设备跟踪必须 IP',
|
||||
`src_ip` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '源地址IP',
|
||||
`dst_ip` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '目标地址IP',
|
||||
`signal_port` int DEFAULT '0' COMMENT '地址IP端口',
|
||||
`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_bin DEFAULT '' COMMENT '备注',
|
||||
`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 NOT NULL DEFAULT '' COMMENT '网元ID',
|
||||
`notify_url` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '信息数据通知回调地址UDP 例如udp:192.168.5.58:29500',
|
||||
`fetch_msg` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '任务下发请求响应消息',
|
||||
`ne_list` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '网元列表 neType_neId 例如 UDM_001,AMF_001',
|
||||
`notify_url` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '信息数据通知回调地址UDP 例如udp:192.168.5.58:33033',
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='跟踪_任务';
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='跟踪_任务';
|
||||
|
||||
-- Dump completed on 2024-09-19 14:26:59
|
||||
-- Dump completed on 2025-04-14 14:26:59
|
||||
|
||||
@@ -26,7 +26,7 @@ REPLACE INTO `kpi_c_title` VALUES (4, 'AMF', 'AMF.C.04', '5G Register Subscriber
|
||||
REPLACE INTO `kpi_c_title` VALUES (5, 'SMF', 'SMF.C.01', 'SA_MeanPduSession', '\'SMF.01\'', ' ', 'Active', '', 'admin', '2024-12-12 19:32:45');
|
||||
REPLACE INTO `kpi_c_title` VALUES (6, 'SMF', 'SMF.C.02', 'PDU Session Establishment Success Rate', '(\'SMF.02\'/\'SMF.03\')*100', '%', 'Active', '', 'admin', '2024-12-12 19:33:27');
|
||||
REPLACE INTO `kpi_c_title` VALUES (7, 'SMF', 'SMF.C.03', 'IMS Session Establishment Success Rate', '(\'SMF.04\'/\'SMF.05\')*100', '%', 'Active', '', 'admin', '2024-12-12 19:34:07');
|
||||
REPLACE INTO `kpi_c_title` VALUES (8, 'MME', 'MME.C.01', 'Attach Success Rate ', '(\'MME.A.02\'/\'MME.A.01\')*100', '%', 'Active', '', 'admin', '2024-12-12 20:26:09');
|
||||
REPLACE INTO `kpi_c_title` VALUES (8, 'MME', 'MME.C.01', 'Attach Success Rate ', '(\'MME.A.05\'/\'MME.A.04\')*100', '%', 'Active', '', 'admin', '2024-12-12 20:26:09');
|
||||
REPLACE INTO `kpi_c_title` VALUES (9, 'UPF', 'UPF.C.01', 'PFCP Establish Success Rate ', '(\'UPF.01\'/\'UPF.02\')*100', '%', 'Active', '', 'admin', '2024-12-12 20:26:40');
|
||||
REPLACE INTO `kpi_c_title` VALUES (10, 'UPF', 'UPF.C.02', 'N6_Uplink_Throughout', '(\'UPF.03\')*8/5/1000/1000', 'Mbps', 'Active', '', 'admin', '2025-01-20 09:26:06');
|
||||
REPLACE INTO `kpi_c_title` VALUES (11, 'UPF', 'UPF.C.03', 'N3_Uplink_Throughout', '(\'UPF.06\')*8/5/1000/1000', 'Mbps', 'Active', '', 'admin', '2025-01-20 09:26:57');
|
||||
@@ -37,7 +37,7 @@ REPLACE INTO `kpi_c_title` VALUES (15, 'IMS', 'IMS.C.02', 'MO_Success_Rate', '(\
|
||||
REPLACE INTO `kpi_c_title` VALUES (16, 'IMS', 'IMS.C.03', 'MT_Success_Rate', '(\'SCSCF.07\'/\'SCSCF.08\')*100', '%', 'Active', '', 'admin', '2024-12-12 20:30:49');
|
||||
REPLACE INTO `kpi_c_title` VALUES (17, 'IMS', 'IMS.C.04', 'Service_Success_Rate ', '((\'SCSCF.05\'+\'SCSCF.07\')/(\'SCSCF.06\'+\'SCSCF.08\'))*100', '%', 'Active', '', 'admin', '2024-12-12 20:31:41');
|
||||
REPLACE INTO `kpi_c_title` VALUES (18, 'SMF', 'SMF.C.06', 'IMS_DefaultBear_Success_Rate ', '(\'SMF.13\'/\'SMF.14\')*100', '%', 'Active', '', 'admin', '2024-12-13 10:49:00');
|
||||
REPLACE INTO `kpi_c_title` VALUES (19, 'SMF', 'SMF.C.07', 'Bear_Success_Rate_new', '((\'SMF.09\'+\'SMF.11\')/(\'SMF.10\'+\'SMF.12\') )*100', '%', 'Active', '', 'admin', '2024-12-13 11:16:04');
|
||||
REPLACE INTO `kpi_c_title` VALUES (19, 'SMF', 'SMF.C.07', 'Bear_Success_Rate_new', '((\'SMF.09\'+\'SMF.11\')/(\'SMF.10\'+\'SMF.12\') )*100', '%', 'Deleted', '', 'admin', '2024-12-13 11:16:04');
|
||||
REPLACE INTO `kpi_c_title` VALUES (22, 'UPF', 'UPF.C.06', 'N3_Downlink_Throughout', '(\'UPF.05\')*8/5/1000/1000', 'Mbps', 'Active', '', 'admin', '2025-01-15 02:53:32');
|
||||
REPLACE INTO `kpi_c_title` VALUES (23, 'UPF', 'UPF.C.07', 'N6_Downlink_Throughout', '(\'UPF.04\')*8/5/1000/1000', 'Mbps', 'Active', '', 'admin', '2025-01-15 02:53:32');
|
||||
|
||||
|
||||
@@ -37,6 +37,6 @@ INSERT IGNORE INTO `sys_config` VALUES (108, 'config.sys.i18nOpen', 'sys.i18n.op
|
||||
INSERT IGNORE INTO `sys_config` VALUES (109, 'config.sys.i18nDefault', 'sys.i18n.default', 'en_US', 'Y', 'supervisor', 1700000000000, NULL, 0, 'config.sys.i18nDefaultRemark');
|
||||
INSERT IGNORE INTO `sys_config` VALUES (110, 'config.sys.lockTime', 'sys.lockTime', '0', 'Y', 'supervisor', 1704960008300, 'admin', 1706838764703, 'config.sys.lockTimeRemark');
|
||||
INSERT IGNORE INTO `sys_config` VALUES (111, 'config.sys.homePage', 'sys.homePage', 'configManage/neOverview/index', 'Y', 'supervisor', 1704960008300, 'admin', 1706838764703, 'config.sys.homePageRemark');
|
||||
INSERT IGNORE INTO `sys_config` VALUES (112, 'config.sys.exportTable', 'sys.exportTable', '43t6VAMQmdnt9ynWGJIR1ufeQOvr1doHDsjWUFT8JVzxTVEYgZ1Xvrk47JaPeCHMPKk9zLhJCU9MmA7JAWslQyWBLHzVOMUmA1ppIL1sVIkWGrdDiw0XuMdvXpUu/adrXHhqo42NP3hxcvwXvkWvgedezzCnUsvqfMt+Yw1Wick=', 'Y', 'supervisor', 1737355823940, 'supervisor', 1737363302083, 'config.sys.exportTableRemark');
|
||||
INSERT IGNORE INTO `sys_config` VALUES (112, 'config.sys.exportTable', 'sys.exportTable', 'B1n9hW6Z2S2wZw4MVPAX6Q4wCuyWKdMk+qH1ZKqpLJxwvq2FBRgAT6WWw+j6O+ExHIJhpJ3XCpMBoiNN/RkW6EPurmqM82gnXWUIf/s6gk7OWrhdvQDD2jjNVBkLCmPLEH3ZLdgnQOZOePA7WyUdXA==', 'Y', 'supervisor', 1737355823940, 'supervisor', 1737363302083, 'config.sys.exportTableRemark');
|
||||
|
||||
SET FOREIGN_KEY_CHECKS=1;
|
||||
@@ -168,6 +168,25 @@ REPLACE INTO `sys_dict_data` VALUES (140, 21, 'dictData.cdr_cause_code.41', '41'
|
||||
REPLACE INTO `sys_dict_data` VALUES (141, 22, 'dictData.cdr_cause_code.42', '42', 'cdr_cause_code', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (142, 23, 'dictData.cdr_cause_code.47', '47', 'cdr_cause_code', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (143, 30, 'dictData.cdr_cause_code.50', '50', 'cdr_cause_code', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (144, 1, 'dictData.trace_msg_type.0', '0', 'trace_msg_type', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (145, 2, 'dictData.trace_msg_type.1', '1', 'trace_msg_type', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (146, 1, 'dictData.trace_msg_direct.0', '0', 'trace_msg_direct', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (147, 2, 'dictData.trace_msg_direct.1', '1', 'trace_msg_direct', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (148, 1, 'dictData.trace_interfaces.1', 'N1', 'trace_interfaces', '', '', '0', 'supervisor', 1712720201349, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (149, 2, 'dictData.trace_interfaces.2', 'N2', 'trace_interfaces', '', '', '0', 'supervisor', 1712720201349, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (150, 3, 'dictData.trace_interfaces.3', 'N1/N2', 'trace_interfaces', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (151, 4, 'dictData.trace_interfaces.4', 'N4', 'trace_interfaces', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (152, 8, 'dictData.trace_interfaces.8', 'N8', 'trace_interfaces', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (153, 10, 'dictData.trace_interfaces.10', 'N10', 'trace_interfaces', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (154, 11, 'dictData.trace_interfaces.11', 'N11', 'trace_interfaces', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (155, 12, 'dictData.trace_interfaces.12', 'N12', 'trace_interfaces', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (156, 13, 'dictData.trace_interfaces.13', 'N13', 'trace_interfaces', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (157, 7, 'dictData.trace_interfaces.7', 'N7', 'trace_interfaces', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (158, 15, 'dictData.trace_interfaces.15', 'N15', 'trace_interfaces', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (159, 17, 'dictData.trace_interfaces.17', 'N17', 'trace_interfaces', '', '', '0', 'supervisor', 1712720201349, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (160, 20, 'dictData.trace_interfaces.20', 'N20', 'trace_interfaces', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (161, 22, 'dictData.trace_interfaces.22', 'N22', 'trace_interfaces', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (162, 40, 'dictData.trace_interfaces.40', 'N40', 'trace_interfaces', '', '', '1', 'supervisor', 1712720201349, '', 0, '');
|
||||
|
||||
|
||||
-- 指定记录条件更新
|
||||
|
||||
@@ -92,7 +92,7 @@ REPLACE INTO `sys_dict_data` VALUES (1071, 1071, 'menu.ueUser.onlineUE', 'UE在
|
||||
REPLACE INTO `sys_dict_data` VALUES (1072, 1072, 'menu.ueUser.base5G', '基站信息', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
|
||||
REPLACE INTO `sys_dict_data` VALUES (1073, 1073, 'menu.trace', '跟踪', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
|
||||
REPLACE INTO `sys_dict_data` VALUES (1074, 1074, 'menu.trace.task', '网元跟踪任务', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
|
||||
REPLACE INTO `sys_dict_data` VALUES (1075, 1075, 'menu.trace.analysis', '网元跟踪数据', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
|
||||
REPLACE INTO `sys_dict_data` VALUES (1075, 1075, 'menu.trace.taskData', '网元跟踪任务数据', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
|
||||
REPLACE INTO `sys_dict_data` VALUES (1076, 1076, 'menu.trace.pcap', '信令抓包', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
|
||||
REPLACE INTO `sys_dict_data` VALUES (1077, 1077, 'menu.fault', '监控', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
|
||||
REPLACE INTO `sys_dict_data` VALUES (1078, 1078, 'config.sys.exportTable', '备份文件FTP服务', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
|
||||
@@ -102,7 +102,7 @@ REPLACE INTO `sys_dict_data` VALUES (1081, 1081, 'menu.ueUser.onlineUERemark', '
|
||||
REPLACE INTO `sys_dict_data` VALUES (1082, 1082, 'menu.ueUser.base5GRemark', '5G基站信息菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
|
||||
REPLACE INTO `sys_dict_data` VALUES (1083, 1083, 'menu.traceRemark', '跟踪管理目录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
|
||||
REPLACE INTO `sys_dict_data` VALUES (1084, 1084, 'menu.trace.taskRemark', '跟踪任务菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
|
||||
REPLACE INTO `sys_dict_data` VALUES (1085, 1085, 'menu.trace.analysisRemark', '信令分析菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
|
||||
-- REPLACE INTO `sys_dict_data` VALUES (1085, 1085, 'menu.trace.analysisRemark', '信令分析菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
|
||||
REPLACE INTO `sys_dict_data` VALUES (1086, 1086, 'menu.trace.pcapRemark', '信令抓包菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
|
||||
REPLACE INTO `sys_dict_data` VALUES (1087, 1087, 'menu.faultRemark', '故障管理目录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
|
||||
REPLACE INTO `sys_dict_data` VALUES (1088, 1088, 'menu.fault.active', '活动告警', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
|
||||
@@ -663,7 +663,7 @@ REPLACE INTO `sys_dict_data` VALUES (2145, 2145, 'menu.system.user.editPost', '
|
||||
REPLACE INTO `sys_dict_data` VALUES (2146, 2146, 'menu.dashboard.smscCDR', '短信话单', 'i18n_zh', '', '', '1', 'supervisor', 1717051745866, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (2147, 2147, 'log.operate.title.smscCDR', '短信话单', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (2148, 2148, 'menu.trace.pcapFile', '信令抓包文件', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (2149, 2149, 'menu.trace.taskAnalyze', '跟踪数据分析', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (2149, 2149, 'menu.trace.taskAnalyze', '网元跟踪任务分析', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (2150, 2150, 'job.ne_data_udm', '网元数据-UDM数据刷新同步', 'i18n_zh', '', '', '1', 'supervisor', 1730173767412, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (2151, 2151, 'menu.system.setting.doc', '系统使用文档', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (2152, 2152, 'menu.system.setting.official', '官网链接', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, '');
|
||||
@@ -702,5 +702,43 @@ REPLACE INTO `sys_dict_data` VALUES (2184, 2184, 'config.sys.homePage', '自定
|
||||
REPLACE INTO `sys_dict_data` VALUES (2185, 2185, 'config.sys.homePageRemark', '选择列表中的任一页面作为主页路径', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (2186, 2186, 'menu.config.neOverview', '网元概览', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (2187, 2187, 'menu.config.neOverviewRemark', '显示所有网元状态配置和license等概览信息', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (2188, 2188, 'job.exportSGWCCDR', '定期从漫游数据话单表导出文件至指定目录', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (2189, 2189, 'table.cdr_event_sgwc', '漫游数据话单', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (2190, 2190, 'menu.dashboard.overview.smfUeNum', '展示数据会话数', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (2191, 2191, 'menu.dashboard.overview.imsUeNum', '展示语音会话数', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (2192, 2192, 'menu.dashboard.overview.gnbBase', '展示5G基站在线信息', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (2193, 2193, 'menu.dashboard.overview.enbBase', '展示4G基站在线信息', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (2194, 2194, 'menu.ueUser.imsUDM', 'IMS签约用户', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (2195, 2195, 'menu.ueUser.imsUDMRemark', 'IMS签约用户菜单', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (2196, 2196, 'menu.ueUser.voipUDM', 'VoIP鉴权数据', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (2197, 2197, 'menu.ueUser.voipUDMRemark', 'VoIP鉴权数据菜单', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (2198, 2198, 'menu.ueUser.exportFile', '文件管理', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (2199, 2199, 'menu.ueUser.exportFileRemark', '文件管理菜单', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (2200, 2200, 'job.backup.ue.data', '定期备份UE用户和数据表', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (2201, 2201, 'table.u_auth_user', 'UDM鉴权用户', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (2202, 2202, 'table.u_sub_user', 'UDM签约用户', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (2203, 2203, 'table.u_voip_auth', 'VoIP鉴权数据', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (2204, 2204, 'table.u_ims_user', 'IMS签约用户', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (2205, 2205, 'dictType.trace_msg_type', '跟踪消息类型', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (2206, 2206, 'dictData.trace_msg_type.0', '请求', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (2207, 2207, 'dictData.trace_msg_type.1', '响应', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (2208, 2208, 'dictType.trace_msg_direct', '跟踪消息方向', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (2209, 2209, 'dictData.trace_msg_direct.0', '接收', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (2210, 2210, 'dictData.trace_msg_direct.1', '发送', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (2211, 2211, 'dictData.trace_interfaces.1', 'N1', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (2212, 2212, 'dictData.trace_interfaces.2', 'N2', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (2213, 2213, 'dictData.trace_interfaces.3', 'N1/N2', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (2214, 2214, 'dictData.trace_interfaces.4', 'N4', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (2215, 2215, 'dictData.trace_interfaces.8', 'N8', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (2216, 2216, 'dictData.trace_interfaces.10', 'N10', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (2217, 2217, 'dictData.trace_interfaces.11', 'N11', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (2218, 2218, 'dictData.trace_interfaces.12', 'N12', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (2219, 2219, 'dictData.trace_interfaces.13', 'N13', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (2220, 2220, 'dictData.trace_interfaces.7', 'N7', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (2221, 2221, 'dictData.trace_interfaces.15', 'N15', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (2222, 2222, 'dictData.trace_interfaces.17', 'N17', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (2223, 2223, 'dictData.trace_interfaces.20', 'N20', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (2224, 2224, 'dictData.trace_interfaces.22', 'N22', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (2225, 2225, 'dictData.trace_interfaces.40', 'N40', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
|
||||
SET FOREIGN_KEY_CHECKS = 1;
|
||||
|
||||
@@ -90,7 +90,7 @@ REPLACE INTO `sys_dict_data` VALUES (3071, 3071, 'menu.ueUser.onlineUE', 'UE Onl
|
||||
REPLACE INTO `sys_dict_data` VALUES (3072, 3072, 'menu.ueUser.base5G', 'Radio Information', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
|
||||
REPLACE INTO `sys_dict_data` VALUES (3073, 3073, 'menu.trace', 'Trace', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
|
||||
REPLACE INTO `sys_dict_data` VALUES (3074, 3074, 'menu.trace.task', 'NE Trace Task', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
|
||||
REPLACE INTO `sys_dict_data` VALUES (3075, 3075, 'menu.trace.analysis', 'NE Trace Task Data', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
|
||||
REPLACE INTO `sys_dict_data` VALUES (3075, 3075, 'menu.trace.taskData', 'NE Trace Task Data', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
|
||||
REPLACE INTO `sys_dict_data` VALUES (3076, 3076, 'menu.trace.pcap', 'Signaling Capture', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
|
||||
REPLACE INTO `sys_dict_data` VALUES (3077, 3077, 'menu.fault', 'Monitor', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
|
||||
REPLACE INTO `sys_dict_data` VALUES (3078, 3078, 'config.sys.exportTable', 'Backup file FTP service', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
|
||||
@@ -100,7 +100,7 @@ REPLACE INTO `sys_dict_data` VALUES (3081, 3081, 'menu.ueUser.onlineUERemark', '
|
||||
REPLACE INTO `sys_dict_data` VALUES (3082, 3082, 'menu.ueUser.base5GRemark', '5G Base Station Information Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
|
||||
REPLACE INTO `sys_dict_data` VALUES (3083, 3083, 'menu.traceRemark', 'Tracking Management Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
|
||||
REPLACE INTO `sys_dict_data` VALUES (3084, 3084, 'menu.trace.taskRemark', 'Tracking Task Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
|
||||
REPLACE INTO `sys_dict_data` VALUES (3085, 3085, 'menu.trace.analysisRemark', 'Signaling Analysis Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
|
||||
-- REPLACE INTO `sys_dict_data` VALUES (3085, 3085, 'menu.trace.analysisRemark', 'Signaling Analysis Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
|
||||
REPLACE INTO `sys_dict_data` VALUES (3086, 3086, 'menu.trace.pcapRemark', 'Signaling Capture Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
|
||||
REPLACE INTO `sys_dict_data` VALUES (3087, 3087, 'menu.faultRemark', 'Fault Management Catalog', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
|
||||
REPLACE INTO `sys_dict_data` VALUES (3088, 3088, 'menu.fault.active', 'Active Alarms', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL);
|
||||
@@ -662,7 +662,7 @@ REPLACE INTO `sys_dict_data` VALUES (4145, 4145, 'menu.system.user.editPost', 'M
|
||||
REPLACE INTO `sys_dict_data` VALUES (4146, 4146, 'menu.dashboard.smscCDR', 'SMS CDR', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (4147, 4147, 'log.operate.title.smscCDR', 'SMS CDR', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (4148, 4148, 'menu.trace.pcapFile', 'Signaling Capture File', 'i18n_en', '', '', '1', 'supervisor', 1718441035866, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (4149, 4149, 'menu.trace.taskAnalyze', 'Tracking Data Analysis', 'i18n_en', '', '', '1', 'supervisor', 1718441035866, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (4149, 4149, 'menu.trace.taskAnalyze', 'NE Trace Task Analysis', 'i18n_en', '', '', '1', 'supervisor', 1718441035866, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (4150, 4150, 'job.ne_data_udm', 'NE Data Sync UDM', 'i18n_en', '', '', '1', 'supervisor', 1730173767412, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (4151, 4151, 'menu.system.setting.doc', 'System User Documentation', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (4152, 4152, 'menu.system.setting.official', 'Official Website', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, '');
|
||||
@@ -701,5 +701,43 @@ REPLACE INTO `sys_dict_data` VALUES (4184, 4184, 'config.sys.homePage', 'Custom
|
||||
REPLACE INTO `sys_dict_data` VALUES (4185, 4185, 'config.sys.homePageRemark', 'Select any page in the list as the homepage', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (4186, 4186, 'menu.config.neOverview', 'NE Overview', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (4187, 4187, 'menu.config.neOverviewRemark', 'Displays overview information such as status, configuration and license of all network elements', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (4188, 4188, 'job.exportSGWCCDR', 'Export regularly from Roaming Data CDR table', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (4189, 4189, 'table.cdr_event_sgwc', 'Roaming Data CDR', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (4190, 4190, 'menu.dashboard.overview.smfUeNum', 'Display data session number', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (4191, 4191, 'menu.dashboard.overview.imsUeNum', 'Display the number of voice sessions', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (4192, 4192, 'menu.dashboard.overview.gnbBase', 'Display 5G base station online information', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (4193, 4193, 'menu.dashboard.overview.enbBase', 'Display 4G base station online information', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (4194, 4194, 'menu.ueUser.imsUDM', 'IMS Subscribers', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (4195, 4195, 'menu.ueUser.imsUDMRemark', 'IMS Subscribers Menu', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (4196, 4196, 'menu.ueUser.voipUDM', 'VoIP Authentication', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (4197, 4197, 'menu.ueUser.voipUDMRemark', 'VoIP Authentication Menu', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (4198, 4198, 'menu.ueUser.exportFile', 'File Management', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (4199, 4199, 'menu.ueUser.exportFileRemark', 'File Management Menu', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (4200, 4200, 'job.backup.ue.data', 'Backup regularly UE users and data', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (4201, 4201, 'table.u_auth_user', 'UDM Authentication', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (4202, 4202, 'table.u_sub_user', 'UDM Subscribers', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (4203, 4203, 'table.u_voip_auth', 'VoIP Authentication', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (4204, 4204, 'table.u_ims_user', 'IMS Subscribers', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (4205, 4205, 'dictType.trace_msg_type', 'Trace Message Type', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (4206, 4206, 'dictData.trace_msg_type.0', 'Request', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (4207, 4207, 'dictData.trace_msg_type.1', 'Response', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (4208, 4208, 'dictType.trace_msg_direct', 'Track Message Directio', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (4209, 4209, 'dictData.trace_msg_direct.0', 'Receive', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (4210, 4210, 'dictData.trace_msg_direct.1', 'Send', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (4211, 4211, 'dictData.trace_interfaces.1', 'N1', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (4212, 4212, 'dictData.trace_interfaces.2', 'N2', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (4213, 4213, 'dictData.trace_interfaces.3', 'N1/N2', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (4214, 4214, 'dictData.trace_interfaces.4', 'N4', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (4215, 4215, 'dictData.trace_interfaces.8', 'N8', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (4216, 4216, 'dictData.trace_interfaces.10', 'N10', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (4217, 4217, 'dictData.trace_interfaces.11', 'N11', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (4218, 4218, 'dictData.trace_interfaces.12', 'N12', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (4219, 4219, 'dictData.trace_interfaces.13', 'N13', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (4220, 4220, 'dictData.trace_interfaces.7', 'N7', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (4221, 4221, 'dictData.trace_interfaces.15', 'N15', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (4222, 4222, 'dictData.trace_interfaces.17', 'N17', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (4223, 4223, 'dictData.trace_interfaces.20', 'N20', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (4224, 4224, 'dictData.trace_interfaces.22', 'N22', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_dict_data` VALUES (4225, 4225, 'dictData.trace_interfaces.40', 'N40', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, '');
|
||||
|
||||
SET FOREIGN_KEY_CHECKS = 1;
|
||||
|
||||
@@ -54,5 +54,8 @@ INSERT IGNORE INTO `sys_dict_type` VALUES (121, 'dictType.ne_host_cmd_groupId',
|
||||
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.cdr_cause_code', 'cdr_cause_code', '1', 'supervisor', 1725877564156, '', 0, '');
|
||||
INSERT IGNORE INTO `sys_dict_type` VALUES (125, 'dictType.trace_msg_type', 'trace_msg_type', '1', 'system', 1699348237468, 'system', 1699348237468, '');
|
||||
INSERT IGNORE INTO `sys_dict_type` VALUES (126, 'dictType.trace_msg_direct', 'trace_msg_direct', '1', 'system', 1699348237468, 'system', 1699348237468, '');
|
||||
INSERT IGNORE INTO `sys_dict_type` VALUES (127, 'dictType.trace_interfaces', 'trace_interfaces', '1', 'system', 1699348237468, 'system', 1699348237468, '');
|
||||
|
||||
SET FOREIGN_KEY_CHECKS = 1;
|
||||
|
||||
@@ -45,7 +45,8 @@ REPLACE INTO `sys_job` VALUES (10, 'job.genNeStateAlarm', 'SYSTEM', 'genNeStateA
|
||||
REPLACE INTO `sys_job` VALUES (11, 'job.exportOperateLog', 'SYSTEM', 'exportTable', '{\"duration\":1,\"tableName\":\"sys_log_operate\",\"timeCol\":\"oper_time\",\"timeUnit\":\"milli\",\"columns\":\"oper_id,omc_get_dict_value(title, \\\"i18n_en\\\") as title,business_type,method,request_method,operator_type,oper_name,dept_name,oper_url,oper_ip,oper_location,oper_param,oper_msg,status,oper_time,cost_time\",\"extras\":\"\",\"filePath\":\"/usr/local/omc/backup/operate_log\"}', '0 0 0/1 * * ?', '3', '0', '1', '1', 'supervisor', 1698478134842, 'admin', 1724833786290, 'job.exportOperateLog');
|
||||
REPLACE INTO `sys_job` VALUES (12, 'job.exportIMSCDR', 'SYSTEM', 'exportTable', '{\"duration\":1,\"tableName\":\"cdr_event_ims\",\"columns\":\"id,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.recordType\')) as record_type,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.callType\')) as call_type,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.callerParty\')) as caller_party,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.calledParty\')) as called_party,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.callDuration\')) as call_duration,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.serviceResult\')) as service_result,DATE_FORMAT(FROM_UNIXTIME(timestamp), \'%Y-%m-%d %H:%i:%s\') AS timestamp\",\"timeCol\":\"timestamp\",\"timeUnit\":\"second\",\"extras\":\"\",\"filePath\":\"/usr/local/omc/backup/ims_cdr\"}', '0 0 0/1 * * ?', '3', '0', '1', '1', 'supervisor', 1698478134842, 'admin', 1722224659251, '');
|
||||
REPLACE INTO `sys_job` VALUES (13, 'job.exportSMFCDR', 'SYSTEM', 'exportTable', '{\"duration\":1,\"tableName\":\"cdr_event_smf\",\"columns\":\"id,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.recordType\')) AS record_type,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.chargingID\')) AS charging_id,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.subscriberIdentifier.subscriptionIDType\')) AS subscriber_id_type,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.subscriberIdentifier.subscriptionIDData\')) AS subscriber_id_data,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.duration\')) AS duration,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.invocationTimestamp\')) as invocationTimestamp,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.listOfMultipleUnitUsage[*].usedUnitContainer[*].dataVolumeUplink\')) AS data_volume_uplink,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.listOfMultipleUnitUsage[*].usedUnitContainer[*].dataVolumeDownlink\')) AS data_volume_downlink,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.listOfMultipleUnitUsage[*].usedUnitContainer[*].dataTotalVolume\')) AS data_total_volume,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.pDUSessionChargingInformation.pDUAddress.pDUIPv4Address\')) AS pdu_ipv4_address,timestamp\",\"timeCol\":\"timestamp\",\"timeUnit\":\"second\",\"extras\":\"\",\"filePath\":\"/usr/local/omc/backup/smf_cdr\"}', '0 0 0/1 * * ?', '3', '0', '1', '1', 'supervisor', 1698478134842, 'admin', 1724309047797, '');
|
||||
REPLACE INTO `sys_job` VALUES (14, 'job.exportSMSCCDR', 'SYSTEM', 'exportTable', '{\"duration\":1,\"tableName\":\"cdr_event_smsc\",\"columns\":\"id,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.recordType\')) as record_type,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.serviceType\')) as service_type,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.callerParty\')) as caller_party,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.calledParty\')) as called_party,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.result\')) as result,DATE_FORMAT(FROM_UNIXTIME(JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.updateTime\'))), \'%Y-%m-%d %H:%i:%s\') as update_time\",\"timeCol\":\"timestamp\",\"timeUnit\":\"second\",\"extras\":\"\",\"filePath\":\"/usr/local/omc/backup/smsc_cdr\"}', '0 0 0/1 * * ?', '3', '0', '1', '1', 'supervisor', 1698478134842, 'admin', 1724309047797, '');
|
||||
REPLACE INTO `sys_job` VALUES (14, 'job.exportSMSCCDR', 'SYSTEM', 'exportTable', '{\"duration\":1,\"tableName\":\"cdr_event_smsc\",\"columns\":\"id,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.recordType\')) as record_type,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.serviceType\')) as service_type,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.callerParty\')) as caller_party,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.calledParty\')) as called_party,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.result\')) as result,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.updateTime\')) as update_time\",\"timeCol\":\"timestamp\",\"timeUnit\":\"second\",\"extras\":\"\",\"filePath\":\"/usr/local/omc/backup/smsc_cdr\"}', '0 0 0/1 * * ?', '3', '0', '1', '1', 'supervisor', 1698478134842, 'admin', 1724309047797, '');
|
||||
REPLACE INTO `sys_job` VALUES (15, 'job.removeExportedFiles', 'SYSTEM', 'removeFile', '[{\"filePath\":\"/usr/local/omc/backup/operate_log\",\"maxDays\":30},{\"filePath\":\"/usr/local/omc/backup/ims_cdr\",\"maxDays\":30},{\"filePath\":\"/usr/local/omc/backup/smf_cdr\",\"maxDays\":30},{\"filePath\":\"/usr/local/omc/backup/smsc_cdr\",\"maxDays\":30}]', '0 10 0 * * ?', '3', '0', '1', '1', 'supervisor', 1698478134842, 'admin', 1728634085631, '');
|
||||
REPLACE INTO `sys_job` VALUES (16, 'job.exportSGWCCDR', 'SYSTEM', 'exportTable', '{\"duration\":1,\"tableName\":\"cdr_event_sgwc\",\"columns\":\"id,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.recordType\')) as recordType,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.accessPointNameNI\')) as accessPointNameNI,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.servedIMSI\')) as IMSI,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.servedMSISDN\')) as MSISDN,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.servedPDPPDNAddress\')) as PdpAddress,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.duration\')) as duration,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.recordOpeningTime\')) as recordOpeningTime,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.chargingID\')) as chargingID,JSON_UNQUOTE(JSON_EXTRACT(cdr_json, \'$.listOfTrafficVolumes[0].dataVolumeGPRSDownlink\')) AS dataVolumeGPRSDownlink,JSON_UNQUOTE(JSON_EXTRACT(cdr_json, \'$.listOfTrafficVolumes[0].dataVolumeGPRsUplink\')) as dataVolumeGPRsUplink,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.userLocationInformation.tai.tac\')) as tac,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.userLocationInformation.ecgi.eutraCellId\')) as cellID\",\"timeCol\":\"timestamp\",\"timeUnit\":\"second\",\"extras\":\"\",\"filePath\":\"/usr/local/omc/backup/sgwc_cdr\"}', '0 0 0/1 * * ?', '3', '0', '1', '1', 'supervisor', 1698478134842, 'admin', 1724309047797, '');
|
||||
|
||||
SET FOREIGN_KEY_CHECKS = 1;
|
||||
@@ -119,8 +119,8 @@ REPLACE INTO `sys_menu` VALUES (2080, 'menu.ueUser.onlineIMS', 5, 4, 'ims', 'neU
|
||||
REPLACE 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');
|
||||
REPLACE INTO `sys_menu` VALUES (2082, 'menu.ueUser.base5G', 5, 7, 'base5G', 'neUser/base5G/index', '1', '0', 'M', '0', '1', 'neUser:base5G:index', 'icon-paixu', 'supervisor', 1700000000000, NULL, 0, 'menu.ueUser.base5GRemark');
|
||||
REPLACE INTO `sys_menu` VALUES (2083, 'menu.trace', 2087, 30, 'traceManage', NULL, '1', '0', 'D', '1', '1', NULL, 'icon-paixu', 'supervisor', 1700000000000, NULL, 0, 'menu.traceRemark');
|
||||
REPLACE INTO `sys_menu` VALUES (2084, 'menu.trace.task', 2083, 1, 'task', 'traceManage/task/index', '1', '0', 'M', '0', '1', 'traceManage:task:index', 'icon-chexiao', 'supervisor', 1700000000000, 'admin', 1713176976458, 'menu.trace.taskRemark');
|
||||
REPLACE INTO `sys_menu` VALUES (2085, 'menu.trace.analysis', 2083, 4, 'analysis', 'traceManage/analysis/index', '1', '0', 'M', '0', '1', 'traceManage:analysis:index', 'icon-gongnengjieshao', 'supervisor', 1700000000000, 'admin', 1713176987835, 'menu.trace.analysisRemark');
|
||||
REPLACE INTO `sys_menu` VALUES (2084, 'menu.trace.task', 2083, 1, 'task', 'traceManage/task/index', '1', '0', 'M', '1', '1', 'traceManage:task:index', 'icon-chexiao', 'supervisor', 1700000000000, 'admin', 1744453890548, 'menu.trace.taskRemark');
|
||||
REPLACE INTO `sys_menu` VALUES (2085, 'menu.trace.taskData', 2083, 4, 'task/inline/data', 'traceManage/task/data', '1', '0', 'M', '0', '1', 'traceManage:task:data', '#', 'supervisor', 1700000000000, 'admin', 1744453921381, '');
|
||||
REPLACE INTO `sys_menu` VALUES (2086, 'menu.trace.pcap', 2083, 11, 'pcap', 'traceManage/pcap/index', '1', '1', 'M', '1', '1', 'traceManage:pcap:index', 'icon-soutubiao', 'supervisor', 1700000000000, NULL, 0, 'menu.trace.pcapRemark');
|
||||
REPLACE 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');
|
||||
REPLACE 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');
|
||||
@@ -191,12 +191,16 @@ REPLACE INTO `sys_menu` VALUES (2156, 'menu.common.edit', 2154, 2, '#', '', '1',
|
||||
REPLACE INTO `sys_menu` VALUES (2157, 'menu.dashboard.smscCDR', 2140, 9, 'smscCDR', 'dashboard/smscCDR/index', '1', '0', 'M', '1', '1', 'dashboard:cdr:index', 'icon-paixu', 'supervisor', 1723107637982, 'supervisor', 1723107637982, '');
|
||||
REPLACE INTO `sys_menu` VALUES (2158, 'menu.trace.pcapFile', 2083, 12, 'pcap/inline/file', 'traceManage/pcap/file', '1', '1', 'M', '0', '1', 'traceManage:pcap:index', '#', 'supervisor', 1724144595914, '', 0, '');
|
||||
REPLACE INTO `sys_menu` VALUES (2159, 'menu.log.exportFile', 2089, 100, 'exportFile', 'logManage/exportFile/index', '1', '1', 'M', '1', '1', 'logManage:exportFile:index', 'icon-wenjian', 'supervisor', 1724144595914, '', 0, '');
|
||||
REPLACE INTO `sys_menu` VALUES (2160, 'menu.perf.kpiCReport', 2099, 100, 'kpiCReport', 'perfManage/kpiCReport/index', '1', '0', 'M', '1', '1', 'perfManage:kpiCReport:index', 'icon-tubiaoku', 'supervisor', 1724144595914, '', 0, '');
|
||||
REPLACE INTO `sys_menu` VALUES (2160, 'menu.perf.kpiCReport', 2099, 100, 'kpiCReport', 'perfManage/kpiCReport/index', '1', '1', 'M', '1', '1', 'perfManage:kpiCReport:index', 'icon-tubiaoku', 'supervisor', 1724144595914, '', 0, '');
|
||||
REPLACE INTO `sys_menu` VALUES (2161, 'menu.trace.taskHLR', 2083, 6, 'taskHLR', 'traceManage/task-hlr/index', '1', '0', 'M', '0', '1', 'traceManage:taskHLR:index', 'icon-chexiao', 'supervisor', 1724144595914, '', 0, '');
|
||||
REPLACE INTO `sys_menu` VALUES (2162, 'menu.trace.taskAnalyze', 2083, 2, 'task/inline/analyze', 'traceManage/task/analyze', '1', '0', 'M', '0', '1', 'traceManage:taskAnalyze:index', '#', 'supervisor', 1724144595914, '', 0, '');
|
||||
REPLACE INTO `sys_menu` VALUES (2162, 'menu.trace.taskAnalyze', 2083, 2, 'task/inline/analyze', 'traceManage/task/analyze', '1', '0', 'M', '0', '1', 'traceManage:task:analyze', '#', 'supervisor', 1724144595914, '', 0, '');
|
||||
REPLACE INTO `sys_menu` VALUES (2163, 'menu.trace.tshark', 2083, 14, 'tshark', 'traceManage/tshark/index', '1', '0', 'M', '1', '1', 'traceManage:tshark:index', 'icon-gengduo', 'supervisor', 1724144595914, '', 0, '');
|
||||
REPLACE INTO `sys_menu` VALUES (2164, 'menu.trace.wireshark', 2083, 16, 'wireshark', 'traceManage/wireshark/index', '1', '0', 'M', '1', '1', 'traceManage:wireshark:index', 'icon-gengduo', 'supervisor', 1724144595914, '', 0, '');
|
||||
REPLACE INTO `sys_menu` VALUES (2165, 'menu.config.neOverview', 4, 1, 'neOverview', 'configManage/neOverview/index', '1', '0', 'M', '1', '1', 'configManage:neOverview:index', 'icon-tubiaoku', 'supervisor', 1700000000000, NULL, 0, 'menu.config.neOverviewRemark');
|
||||
REPLACE INTO `sys_menu` VALUES (2166, 'menu.dashboard.overview.smfUeNum', 2132, 2, '#', '', '1', '1', 'B', '1', '1', 'dashboard:overview:smfUeNum', '#', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_menu` VALUES (2167, 'menu.dashboard.overview.imsUeNum', 2132, 4, '#', '', '1', '1', 'B', '1', '1', 'dashboard:overview:imsUeNum', '#', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_menu` VALUES (2168, 'menu.dashboard.overview.gnbBase', 2132, 6, '#', '', '1', '1', 'B', '1', '1', 'dashboard:overview:gnbBase', '#', 'supervisor', 1721902269805, '', 0, '');
|
||||
REPLACE INTO `sys_menu` VALUES (2169, 'menu.dashboard.overview.enbBase', 2132, 8, '#', '', '1', '1', 'B', '1', '1', 'dashboard:overview:enbBase', '#', 'supervisor', 1721902269805, '', 0, '');
|
||||
|
||||
-- 指定记录条件更新
|
||||
|
||||
|
||||
@@ -1,6 +1,3 @@
|
||||
SET NAMES utf8mb4;
|
||||
SET FOREIGN_KEY_CHECKS = 0;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for sys_role_menu
|
||||
-- ----------------------------
|
||||
@@ -10,17 +7,17 @@ CREATE TABLE IF NOT EXISTS `sys_role_menu` (
|
||||
PRIMARY KEY (`role_id`, `menu_id`) USING BTREE
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '角色和菜单关联表' ROW_FORMAT = Dynamic;
|
||||
|
||||
-- ----------------------------
|
||||
-- Records of sys_role_menu
|
||||
-- ----------------------------
|
||||
--
|
||||
-- Dumping data for table `sys_role_menu`
|
||||
--
|
||||
|
||||
LOCK TABLES `sys_role_menu` WRITE;
|
||||
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 4);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 5);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 60);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 61);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 63);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 64);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 65);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 66);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 100);
|
||||
@@ -31,7 +28,6 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (2, 104);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 105);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 108);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 111);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 112);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 115);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 116);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 117);
|
||||
@@ -63,20 +59,13 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1022);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1023);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1024);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1030);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1031);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1032);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1033);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1034);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1039);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1040);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1041);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1042);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1043);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1044);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1045);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1048);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1049);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1050);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1051);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1052);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1053);
|
||||
@@ -87,10 +76,8 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2009);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2010);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2080);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2081);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2082);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2083);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2084);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2085);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2086);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2087);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2088);
|
||||
@@ -98,16 +85,12 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2089);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2091);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2092);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2094);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2097);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2096);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2098);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2097);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2099);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2100);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2101);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2102);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2103);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2104);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2105);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2106);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2107);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2108);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2109);
|
||||
@@ -115,17 +98,13 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2111);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2112);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2113);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2114);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2115);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2116);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2117);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2118);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2119);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2120);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2121);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2122);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2123);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2124);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2125);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2126);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2128);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2129);
|
||||
@@ -155,25 +134,22 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2157);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2158);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2159);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2160);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2162);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2163);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2164);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2165);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2166);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2167);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2168);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2169);
|
||||
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 1);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 4);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 5);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 60);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 65);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 66);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 108);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 112);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 115);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 500);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 501);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 1030);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 1031);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 1032);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 1034);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 1039);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 1042);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 1048);
|
||||
@@ -181,7 +157,6 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2009);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2010);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2080);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2081);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2082);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2083);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2086);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2087);
|
||||
@@ -190,15 +165,14 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2089);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2091);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2092);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2094);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2096);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2097);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2107);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2108);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2109);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2111);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2113);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2114);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2115);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2119);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2116);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2120);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2123);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2126);
|
||||
@@ -217,22 +191,21 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2146);
|
||||
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 (3, 2151);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2152);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2153);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2154);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2155);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2156);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2157);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2158);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2165);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2166);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2167);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2168);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2169);
|
||||
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 1);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 4);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 60);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 65);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 66);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 112);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 115);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 500);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 501);
|
||||
@@ -251,7 +224,7 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2092);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2094);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2097);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2113);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2114);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2116);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2126);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2128);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2129);
|
||||
@@ -265,20 +238,19 @@ 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 (4, 2151);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2152);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2153);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2157);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2158);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2163);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2165);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2166);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2167);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2168);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2169);
|
||||
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (5, 1);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (5, 4);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (5, 112);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (5, 2087);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (5, 2115);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (5, 2131);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (5, 2132);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (5, 2165);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (5, 2126);
|
||||
INSERT IGNORE INTO `sys_role_menu` VALUES (5, 2130);
|
||||
|
||||
SET FOREIGN_KEY_CHECKS = 1;
|
||||
UNLOCK TABLES;
|
||||
|
||||
-- Dump completed on 2024-04-12 21:19:19
|
||||
|
||||
44
database/upgrade/upg_trace_data.sql
Normal file
44
database/upgrade/upg_trace_data.sql
Normal file
@@ -0,0 +1,44 @@
|
||||
--
|
||||
-- Table structure for table `trace_data`
|
||||
--
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `trace_data` (
|
||||
`id` int NOT NULL AUTO_INCREMENT,
|
||||
`trace_id` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '跟踪任务ID',
|
||||
`imsi` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT 'UE类型 IMSI',
|
||||
`msisdn` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT 'UE类型 可能存在',
|
||||
`src_addr` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '源地址',
|
||||
`dst_addr` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '目标地址',
|
||||
`if_type` varchar(16) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '接口类型,未分类',
|
||||
`msg_type` int DEFAULT NULL COMMENT '消息类型,0-req, 1-rsp',
|
||||
`msg_direct` int DEFAULT NULL COMMENT '消息方向,0-recv,1-send',
|
||||
`msg_ne` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '消息网元',
|
||||
`msg_event` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '消息事件,e.g: CreateContextReq',
|
||||
`length` int DEFAULT NULL COMMENT '原始数据byte长度',
|
||||
`timestamp` bigint DEFAULT '0' COMMENT '纳秒时间戳',
|
||||
`raw_msg` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '原始数据byteBase64',
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
KEY `idx_task_id_time` (`trace_id`,`timestamp`) COMMENT '任务DI时间'
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='跟踪_任务数据';
|
||||
|
||||
-- Dump completed on 2025-04-14 14:26:59
|
||||
|
||||
ALTER TABLE `trace_data` COMMENT = '跟踪_任务数据';
|
||||
ALTER TABLE `trace_data` ADD COLUMN IF NOT EXISTS `trace_id` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '跟踪任务ID' AFTER `id`;
|
||||
ALTER TABLE `trace_data` ADD COLUMN IF NOT EXISTS `msg_ne` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '消息网元' AFTER `msg_direct`;
|
||||
ALTER TABLE `trace_data` ADD COLUMN IF NOT EXISTS `msg_event` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '消息事件,e.g: CreateContextReq' AFTER `msg_ne`;
|
||||
ALTER TABLE `trace_data` MODIFY COLUMN `id` int NOT NULL FIRST;
|
||||
ALTER TABLE `trace_data` MODIFY COLUMN `imsi` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT 'UE类型 IMSI' AFTER `trace_id`;
|
||||
ALTER TABLE `trace_data` MODIFY COLUMN `msisdn` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT 'UE类型 可能存在' AFTER `imsi`;
|
||||
ALTER TABLE `trace_data` MODIFY COLUMN `src_addr` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '源地址' AFTER `msisdn`;
|
||||
ALTER TABLE `trace_data` MODIFY COLUMN `dst_addr` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '目标地址' AFTER `src_addr`;
|
||||
ALTER TABLE `trace_data` MODIFY COLUMN `if_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '接口类型,未分类' AFTER `dst_addr`;
|
||||
ALTER TABLE `trace_data` MODIFY COLUMN `msg_type` int NULL DEFAULT NULL COMMENT '消息类型,0-req, 1-rsp' AFTER `if_type`;
|
||||
ALTER TABLE `trace_data` MODIFY COLUMN `msg_direct` int NULL DEFAULT NULL COMMENT '消息方向,0-recv,1-send' AFTER `msg_type`;
|
||||
ALTER TABLE `trace_data` MODIFY COLUMN `length` int NULL DEFAULT NULL COMMENT '原始数据byte长度' AFTER `msg_event`;
|
||||
ALTER TABLE `trace_data` MODIFY COLUMN `timestamp` bigint NULL DEFAULT 0 COMMENT '纳秒时间戳' AFTER `length`;
|
||||
ALTER TABLE `trace_data` MODIFY COLUMN `raw_msg` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '原始数据byteBase64' AFTER `timestamp`;
|
||||
ALTER TABLE `trace_data` MODIFY COLUMN `id` int NOT NULL AUTO_INCREMENT;
|
||||
ALTER TABLE `trace_data` DROP COLUMN IF EXISTS `task_id`;
|
||||
ALTER TABLE `trace_data` DROP COLUMN IF EXISTS `dec_msg`;
|
||||
ALTER TABLE `trace_data` ADD INDEX IF NOT EXISTS `idx_task_id_time`(`trace_id`, `timestamp`) USING BTREE COMMENT '任务DI时间';
|
||||
49
database/upgrade/upg_trace_task.sql
Normal file
49
database/upgrade/upg_trace_task.sql
Normal file
@@ -0,0 +1,49 @@
|
||||
--
|
||||
-- Table structure for table `trace_task`
|
||||
--
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `trace_task` (
|
||||
`id` int NOT NULL AUTO_INCREMENT COMMENT 'ID',
|
||||
`trace_id` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '任务编号',
|
||||
`trace_type` varchar(2) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '1-Interface,2-Device,3-UE',
|
||||
`start_time` bigint DEFAULT '0' COMMENT '开始时间 毫秒',
|
||||
`end_time` bigint DEFAULT '0' COMMENT '结束时间 毫秒',
|
||||
`interfaces` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '接口跟踪必须 例如 N8,N10',
|
||||
`imsi` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '用户跟踪必须',
|
||||
`msisdn` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '用户跟踪可选',
|
||||
`src_ip` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '源地址IP',
|
||||
`dst_ip` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '目标地址IP',
|
||||
`create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '创建者',
|
||||
`create_time` bigint DEFAULT '0' COMMENT '创建时间',
|
||||
`remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '备注',
|
||||
`ne_list` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '网元列表 neType_neId 例如 UDM_001,AMF_001',
|
||||
`notify_url` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '信息数据通知回调地址UDP 例如udp:192.168.5.58:33033',
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='跟踪_任务';
|
||||
|
||||
-- Dump completed on 2025-04-14 14:26:59
|
||||
|
||||
ALTER TABLE `trace_task` COMMENT = '跟踪_任务';
|
||||
ALTER TABLE `trace_task` ADD COLUMN IF NOT EXISTS `ne_list` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '网元列表 neType_neId 例如 UDM_001,AMF_001' AFTER `remark`;
|
||||
ALTER TABLE `trace_task` MODIFY COLUMN `id` int NOT NULL COMMENT 'ID' FIRST;
|
||||
ALTER TABLE `trace_task` MODIFY COLUMN `trace_id` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '任务编号' AFTER `id`;
|
||||
ALTER TABLE `trace_task` MODIFY COLUMN `trace_type` varchar(2) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '1-Interface,2-Device,3-UE' AFTER `trace_id`;
|
||||
ALTER TABLE `trace_task` MODIFY COLUMN `start_time` bigint NULL DEFAULT 0 COMMENT '开始时间 毫秒' AFTER `trace_type`;
|
||||
ALTER TABLE `trace_task` MODIFY COLUMN `end_time` bigint NULL DEFAULT 0 COMMENT '结束时间 毫秒' AFTER `start_time`;
|
||||
ALTER TABLE `trace_task` MODIFY COLUMN `interfaces` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT '' COMMENT '接口跟踪必须 例如 N8,N10' AFTER `end_time`;
|
||||
ALTER TABLE `trace_task` MODIFY COLUMN `imsi` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '用户跟踪必须' AFTER `interfaces`;
|
||||
ALTER TABLE `trace_task` MODIFY COLUMN `msisdn` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '用户跟踪可选' AFTER `imsi`;
|
||||
ALTER TABLE `trace_task` MODIFY COLUMN `src_ip` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '源地址IP' AFTER `msisdn`;
|
||||
ALTER TABLE `trace_task` MODIFY COLUMN `dst_ip` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '目标地址IP' AFTER `src_ip`;
|
||||
ALTER TABLE `trace_task` MODIFY COLUMN `create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者' AFTER `dst_ip`;
|
||||
ALTER TABLE `trace_task` MODIFY COLUMN `create_time` bigint NULL DEFAULT 0 COMMENT '创建时间' AFTER `create_by`;
|
||||
ALTER TABLE `trace_task` MODIFY COLUMN `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT '' COMMENT '备注' AFTER `create_time`;
|
||||
ALTER TABLE `trace_task` MODIFY COLUMN `notify_url` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '信息数据通知回调地址UDP 例如udp:192.168.5.58:33033' AFTER `ne_list`;
|
||||
ALTER TABLE `trace_task` MODIFY COLUMN `id` int NOT NULL AUTO_INCREMENT COMMENT 'ID';
|
||||
ALTER TABLE `trace_task` DROP COLUMN IF EXISTS `ue_ip`;
|
||||
ALTER TABLE `trace_task` DROP COLUMN IF EXISTS `signal_port`;
|
||||
ALTER TABLE `trace_task` DROP COLUMN IF EXISTS `update_by`;
|
||||
ALTER TABLE `trace_task` DROP COLUMN IF EXISTS `update_time`;
|
||||
ALTER TABLE `trace_task` DROP COLUMN IF EXISTS `ne_type`;
|
||||
ALTER TABLE `trace_task` DROP COLUMN IF EXISTS `ne_id`;
|
||||
ALTER TABLE `trace_task` DROP COLUMN IF EXISTS `fetch_msg`;
|
||||
@@ -4,7 +4,6 @@ SET FOREIGN_KEY_CHECKS = 0;
|
||||
-- ----------------------------
|
||||
-- Table structure for ue_event_amf
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `ue_event_amf`;
|
||||
CREATE TABLE IF NOT EXISTS `ue_event_amf` (
|
||||
`id` int NOT NULL AUTO_INCREMENT,
|
||||
`ne_type` varchar(32) COLLATE utf8mb4_general_ci DEFAULT NULL,
|
||||
|
||||
@@ -4,7 +4,6 @@ SET FOREIGN_KEY_CHECKS = 0;
|
||||
-- ----------------------------
|
||||
-- Table structure for ue_event_mme
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `ue_event_mme`;
|
||||
CREATE TABLE IF NOT EXISTS `ue_event_mme` (
|
||||
`id` int NOT NULL AUTO_INCREMENT,
|
||||
`ne_type` varchar(32) COLLATE utf8mb4_general_ci DEFAULT NULL,
|
||||
|
||||
@@ -62,14 +62,14 @@ func PostCDREventFrom(w http.ResponseWriter, r *http.Request) {
|
||||
switch neInfo.NeType {
|
||||
case "IMS":
|
||||
if v, ok := cdrEvent.CDR["recordType"]; ok && (v == "MOC" || v == "MTSM") {
|
||||
wsService.NewWSSend.ByGroupID(wsService.GROUP_IMS_CDR+neInfo.NeId, cdrEvent)
|
||||
wsService.NewWSSend.ByGroupID(wsService.GROUP_IMS_CDR+"_"+neInfo.NeId, cdrEvent)
|
||||
}
|
||||
case "SMF":
|
||||
wsService.NewWSSend.ByGroupID(wsService.GROUP_SMF_CDR+neInfo.NeId, cdrEvent)
|
||||
wsService.NewWSSend.ByGroupID(wsService.GROUP_SMF_CDR+"_"+neInfo.NeId, cdrEvent)
|
||||
case "SMSC":
|
||||
wsService.NewWSSend.ByGroupID(wsService.GROUP_SMSC_CDR+neInfo.NeId, cdrEvent)
|
||||
wsService.NewWSSend.ByGroupID(wsService.GROUP_SMSC_CDR+"_"+neInfo.NeId, cdrEvent)
|
||||
case "SGWC":
|
||||
wsService.NewWSSend.ByGroupID(wsService.GROUP_SGWC_CDR+neInfo.NeId, cdrEvent)
|
||||
wsService.NewWSSend.ByGroupID(wsService.GROUP_SGWC_CDR+"_"+neInfo.NeId, cdrEvent)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -15,6 +15,13 @@ import (
|
||||
func AlarmEmailForward(alarmData *Alarm) error {
|
||||
log.Info("AlarmEmailForward processing... ")
|
||||
|
||||
alarmStatus := "Clear"
|
||||
if alarmData.AlarmStatus == 1 {
|
||||
alarmStatus = "Active"
|
||||
}
|
||||
severity := alarmData.OrigSeverity
|
||||
subjectTime := fmt.Sprintf("%s-%s-%s", severity, alarmData.NeName, alarmData.AlarmTitle)
|
||||
|
||||
message := fmt.Sprintf(`
|
||||
<p>Alarm information</p>
|
||||
<p style="text-indent:2.5em">Sequence: %d</p>
|
||||
@@ -22,9 +29,9 @@ func AlarmEmailForward(alarmData *Alarm) error {
|
||||
<p style="text-indent:4em">Title: %s</p>
|
||||
<p style="text-indent:2.5em">Severity: %s</p>
|
||||
<p style="text-indent:1.5em">Event Time: %s</p>
|
||||
<p style="text-indent:0.5em">Alarm Status: %d</p>
|
||||
<p style="text-indent:0.5em">Alarm Status: %s</p>
|
||||
<p>Automatic sent by OMC, please do not reply!</p>
|
||||
`, alarmData.AlarmSeq, alarmData.NeName, alarmData.AlarmTitle, alarmData.OrigSeverity, alarmData.EventTime, alarmData.AlarmStatus)
|
||||
`, alarmData.AlarmSeq, alarmData.NeName, alarmData.AlarmTitle, alarmData.OrigSeverity, alarmData.EventTime, alarmStatus)
|
||||
|
||||
// message := fmt.Sprintf(`
|
||||
// Alarm information
|
||||
@@ -81,7 +88,7 @@ func AlarmEmailForward(alarmData *Alarm) error {
|
||||
//m.SetHeader("To", "zhangshuzhong@agrandtech.com", "simonzhangsz@outlook.com") // 收件人,可以多个收件人,但必须使用相同的 SMTP 连接
|
||||
//m.SetHeader("Cc", "******@qq.com") // 抄送,可以多个
|
||||
//m.SetHeader("Bcc", "******@qq.com") // 暗送,可以多个
|
||||
m.SetHeader("Subject", "Alarm from OMC!") // 邮件主题
|
||||
m.SetHeader("Subject", subjectTime) // 邮件主题
|
||||
|
||||
// text/html 的意思是将文件的 content-type 设置为 text/html 的形式,浏览器在获取到这种文件时会自动调用html的解析器对文件进行相应的处理。
|
||||
// 可以通过 text/html 处理文本格式进行特殊处理,如换行、缩进、加粗等等
|
||||
|
||||
@@ -2,14 +2,10 @@ package file_export
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"os"
|
||||
"path"
|
||||
"path/filepath"
|
||||
"time"
|
||||
|
||||
"github.com/jlaffaye/ftp"
|
||||
|
||||
"be.ems/lib/file"
|
||||
"be.ems/lib/log"
|
||||
@@ -160,7 +156,7 @@ func (m *SysJob) SetFTPConfig(c *gin.Context) {
|
||||
Username string `json:"username" binding:"required"`
|
||||
ToIp string `json:"toIp" binding:"required"`
|
||||
ToPort int64 `json:"toPort" binding:"required"`
|
||||
Protocol string `json:"protocol" binding:"required,oneof=ssh ftp"`
|
||||
Enable bool `json:"enable"`
|
||||
Dir string `json:"dir" binding:"required"`
|
||||
}
|
||||
if err := c.ShouldBindBodyWithJSON(&body); err != nil {
|
||||
@@ -191,7 +187,7 @@ func (m *SysJob) SetFTPConfig(c *gin.Context) {
|
||||
c.JSON(200, result.Ok(nil))
|
||||
}
|
||||
|
||||
// 设置FTP配置
|
||||
// 获取FTP配置
|
||||
// GET /table/ftp
|
||||
func (m *SysJob) GetFTPConfig(c *gin.Context) {
|
||||
// 获取配置
|
||||
@@ -209,7 +205,7 @@ func (m *SysJob) GetFTPConfig(c *gin.Context) {
|
||||
Username string `json:"username" binding:"required"`
|
||||
ToIp string `json:"toIp" binding:"required"`
|
||||
ToPort int64 `json:"toPort" binding:"required"`
|
||||
Protocol string `json:"protocol" binding:"required,oneof=ssh ftp"`
|
||||
Enable bool `json:"enable"`
|
||||
Dir string `json:"dir" binding:"required"`
|
||||
}
|
||||
err = json.Unmarshal([]byte(bodyDe), &body)
|
||||
@@ -251,7 +247,7 @@ func (m *SysJob) PutFTP(c *gin.Context) {
|
||||
Username string `json:"username" binding:"required"`
|
||||
ToIp string `json:"toIp" binding:"required"`
|
||||
ToPort int64 `json:"toPort" binding:"required"`
|
||||
Protocol string `json:"protocol" binding:"required,oneof=ssh ftp"`
|
||||
Enable bool `json:"enable"`
|
||||
Dir string `json:"dir" binding:"required"`
|
||||
}
|
||||
cfg := systemService.NewSysConfigImpl.SelectConfigByKey("sys.exportTable")
|
||||
@@ -269,70 +265,37 @@ func (m *SysJob) PutFTP(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
if cfgData.Protocol == "ssh" {
|
||||
connSSH := ssh.ConnSSH{
|
||||
User: cfgData.Username,
|
||||
Password: cfgData.Password,
|
||||
Addr: cfgData.ToIp,
|
||||
Port: cfgData.ToPort,
|
||||
AuthMode: "0",
|
||||
}
|
||||
sshClient, err := connSSH.NewClient()
|
||||
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()
|
||||
// 远程文件
|
||||
remotePath := filepath.Join(cfgData.Dir, path.Base(body.FilePath), body.FileName)
|
||||
// 复制到远程
|
||||
if err = sftpClient.CopyFileLocalToRemote(localFilePath, remotePath); err != nil {
|
||||
c.JSON(200, result.ErrMsg("error uploading file"))
|
||||
return
|
||||
}
|
||||
c.JSON(200, result.Ok(nil))
|
||||
if !cfgData.Enable {
|
||||
c.JSON(200, result.ErrMsg("Setting Remote Backup is disabled"))
|
||||
return
|
||||
}
|
||||
|
||||
if cfgData.Protocol == "ftp" {
|
||||
// 连接到 FTP 服务器
|
||||
addr := fmt.Sprintf("%s:%d", cfgData.ToIp, cfgData.ToPort)
|
||||
ftpComm, err := ftp.Dial(addr, ftp.DialWithTimeout(15*time.Second))
|
||||
if err != nil {
|
||||
c.JSON(200, result.ErrMsg(err.Error()))
|
||||
return
|
||||
}
|
||||
// 登录到 FTP 服务器
|
||||
err = ftpComm.Login(cfgData.Username, cfgData.Password)
|
||||
if err != nil {
|
||||
c.JSON(200, result.ErrMsg(err.Error()))
|
||||
return
|
||||
}
|
||||
defer ftpComm.Quit()
|
||||
// 打开本地文件
|
||||
file, err := os.Open(localFilePath)
|
||||
if err != nil {
|
||||
c.JSON(200, result.ErrMsg(err.Error()))
|
||||
return
|
||||
}
|
||||
defer file.Close()
|
||||
// 远程文件
|
||||
remotePath := filepath.Join(cfgData.Dir, path.Base(body.FilePath), body.FileName)
|
||||
// 上传文件到 FTP 服务器
|
||||
err = ftpComm.Stor(remotePath, file)
|
||||
if err != nil {
|
||||
c.JSON(200, result.ErrMsg(err.Error()))
|
||||
return
|
||||
}
|
||||
connSSH := ssh.ConnSSH{
|
||||
User: cfgData.Username,
|
||||
Password: cfgData.Password,
|
||||
Addr: cfgData.ToIp,
|
||||
Port: cfgData.ToPort,
|
||||
AuthMode: "0",
|
||||
}
|
||||
|
||||
c.JSON(200, result.Err(nil))
|
||||
sshClient, err := connSSH.NewClient()
|
||||
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()
|
||||
// 远程文件
|
||||
remotePath := filepath.Join(cfgData.Dir, path.Base(body.FilePath), body.FileName)
|
||||
// 复制到远程
|
||||
if err = sftpClient.CopyFileLocalToRemote(localFilePath, remotePath); err != nil {
|
||||
c.JSON(200, result.ErrMsg("error uploading file"))
|
||||
return
|
||||
}
|
||||
c.JSON(200, result.Ok(nil))
|
||||
}
|
||||
|
||||
@@ -17,10 +17,12 @@ func Register(r *gin.RouterGroup) {
|
||||
)
|
||||
lmTable.POST("/ftp",
|
||||
middleware.PreAuthorize(nil),
|
||||
middleware.CryptoApi(true, false),
|
||||
m.SetFTPConfig,
|
||||
)
|
||||
lmTable.GET("/ftp",
|
||||
middleware.PreAuthorize(nil),
|
||||
middleware.CryptoApi(false, true),
|
||||
m.GetFTPConfig,
|
||||
)
|
||||
lmTable.PUT("/ftp",
|
||||
|
||||
@@ -34,7 +34,7 @@ func (k *KpiCReport) Get(c *gin.Context) {
|
||||
dbg := dborm.DefaultDB().Table(tableName)
|
||||
|
||||
if querys.NeID != "" {
|
||||
conditions = append(conditions, "rm_uid = (select n.rm_uid from ne_info n where n.ne_type=? and n.ne_id=? and n.status=1)")
|
||||
conditions = append(conditions, "rm_uid = (select n.rm_uid from ne_info n where n.ne_type=? and n.ne_id=?)")
|
||||
params = append(params, strings.ToUpper(querys.NeType), querys.NeID)
|
||||
} else {
|
||||
c.JSON(http.StatusBadRequest, services.ErrResp("Not found required parameter NE ID"))
|
||||
@@ -101,7 +101,7 @@ func (k *KpiCReport) GetReport2FE(c *gin.Context) {
|
||||
dbg := dborm.DefaultDB().Table(tableName)
|
||||
|
||||
if querys.NeID != "" {
|
||||
conditions = append(conditions, "rm_uid = (select n.rm_uid from ne_info n where n.ne_type=? and n.ne_id=? and n.status=1)")
|
||||
conditions = append(conditions, "rm_uid = (select n.rm_uid from ne_info n where n.ne_type=? and n.ne_id=?)")
|
||||
params = append(params, querys.NeType, querys.NeID)
|
||||
} else {
|
||||
c.JSON(http.StatusBadRequest, services.ErrResp("Not found required parameter NE ID"))
|
||||
|
||||
@@ -19,6 +19,8 @@ import (
|
||||
"be.ems/lib/log"
|
||||
"be.ems/lib/services"
|
||||
|
||||
"be.ems/src/framework/utils/parse"
|
||||
neDataService "be.ems/src/modules/network_data/service"
|
||||
neService "be.ems/src/modules/network_element/service"
|
||||
wsService "be.ems/src/modules/ws/service"
|
||||
"github.com/go-resty/resty/v2"
|
||||
@@ -324,11 +326,15 @@ func PostKPIReportFromNF(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
if neInfo.RmUID == kpiData.RmUid {
|
||||
// 推送到ws订阅组
|
||||
wsService.NewWSSend.ByGroupID(fmt.Sprintf("%s%s_%s", wsService.GROUP_KPI, neInfo.NeType, neInfo.NeId), kpiEvent)
|
||||
wsService.NewWSSend.ByGroupID(fmt.Sprintf("%s_%s_%s", wsService.GROUP_KPI, neInfo.NeType, neInfo.NeId), kpiEvent)
|
||||
// 推送自定义KPI到ws订阅组
|
||||
wsService.NewWSSend.ByGroupID(fmt.Sprintf("%s%s_%s", wsService.GROUP_KPI_C, neInfo.NeType, neInfo.NeId), kpiCEvent)
|
||||
wsService.NewWSSend.ByGroupID(fmt.Sprintf("%s_%s_%s", wsService.GROUP_KPI_C, neInfo.NeType, neInfo.NeId), kpiCEvent)
|
||||
if neInfo.NeType == "UPF" {
|
||||
wsService.NewWSSend.ByGroupID(wsService.GROUP_KPI_UPF+neInfo.NeId, kpiEvent)
|
||||
wsService.NewWSSend.ByGroupID(wsService.GROUP_KPI_UPF+"_"+neInfo.NeId, kpiEvent)
|
||||
// 更新UPF总流量
|
||||
upValue := parse.Number(kpiEvent["UPF.03"])
|
||||
downValue := parse.Number(kpiEvent["UPF.06"])
|
||||
neDataService.NewPerfKPI.UPFTodayFlowUpdate(neInfo.RmUID, upValue, downValue)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
209
features/ue/ims_user/service.go
Normal file
209
features/ue/ims_user/service.go
Normal file
@@ -0,0 +1,209 @@
|
||||
package ims_user
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"be.ems/src/framework/database/redis"
|
||||
neService "be.ems/src/modules/network_element/service"
|
||||
)
|
||||
|
||||
// 实例化服务层 Service 结构体
|
||||
var NewVoLTEService = &Service{
|
||||
volteRepository: NewVoLTERepository,
|
||||
}
|
||||
|
||||
// VoLTE用户信息 服务层处理
|
||||
type Service struct {
|
||||
volteRepository *Repository // VoLTE用户信息数据信息
|
||||
}
|
||||
|
||||
// dataByRedis UDM签约用户 db:0 中 volte:*
|
||||
func (r *Service) dataByRedis(imsi, neId string) []VoLTEUser {
|
||||
arr := []VoLTEUser{}
|
||||
key := fmt.Sprintf("volte:%s", imsi)
|
||||
source := fmt.Sprintf("UDM_%s", neId)
|
||||
|
||||
// 网元主机的Redis客户端
|
||||
redisClient, err := neService.NewNeInfo.NeRunRedisClient("UDM", neId)
|
||||
if err != nil {
|
||||
return arr
|
||||
}
|
||||
defer func() {
|
||||
redisClient.Close()
|
||||
redis.ConnectPush(source, nil)
|
||||
}()
|
||||
redis.ConnectPush(source, redisClient.Client)
|
||||
|
||||
udmsdArr, err := redis.GetKeys(source, key)
|
||||
if err != nil {
|
||||
return arr
|
||||
}
|
||||
mkv, err := redis.GetHashBatch(source, udmsdArr)
|
||||
if err != nil {
|
||||
return arr
|
||||
}
|
||||
|
||||
for k, m := range mkv {
|
||||
var imsi, msisdn string
|
||||
KeyParts := strings.Split(k, ":")
|
||||
switch len(KeyParts) {
|
||||
case 0, 1:
|
||||
// 处理单个部分的情况
|
||||
continue
|
||||
case 2:
|
||||
// 处理两个部分的情况
|
||||
imsi = KeyParts[1]
|
||||
msisdn = "-"
|
||||
case 3:
|
||||
// 处理三个部分的情况
|
||||
imsi = KeyParts[1]
|
||||
msisdn = KeyParts[2]
|
||||
default:
|
||||
// 处理更多部分的情况
|
||||
imsi = KeyParts[1]
|
||||
msisdn = KeyParts[2]
|
||||
}
|
||||
|
||||
var vni string = "-"
|
||||
impiParts := strings.Split(m["impi"], "@")
|
||||
if len(impiParts) > 1 {
|
||||
vni = impiParts[1] // 输出: ims.mnc001.mcc110.3gppnetwork.org
|
||||
}
|
||||
a := VoLTEUser{
|
||||
NeId: neId,
|
||||
IMSI: imsi, // volte:360000100000130:8612300000130
|
||||
MSISDN: msisdn, // 8612300000130
|
||||
Tag: m["tag"], // volte = tag
|
||||
VNI: vni, // ims.mnc001.mcc110.3gppnetwork.org
|
||||
}
|
||||
arr = append(arr, a)
|
||||
}
|
||||
return arr
|
||||
}
|
||||
|
||||
// ResetData 重置鉴权用户数据,清空数据库重新同步Redis数据
|
||||
func (r *Service) ResetData(neId string) int64 {
|
||||
subArr := r.dataByRedis("*", neId)
|
||||
// 数据清空后添加
|
||||
go r.volteRepository.ClearAndInsert(neId, subArr)
|
||||
return int64(len(subArr))
|
||||
}
|
||||
|
||||
// ParseInfo 解析单个用户imsi签约信息 data从命令MML得到的结果
|
||||
func (r *Service) ParseInfo(imsi, neId string, data map[string]string) VoLTEUser {
|
||||
u := r.volteRepository.SelectByIMSIAndNeID(imsi, neId)
|
||||
|
||||
msisdn := data["msisdn"]
|
||||
if imsMsisdnLen := strings.Index(msisdn, ","); imsMsisdnLen != -1 {
|
||||
msisdn = msisdn[:imsMsisdnLen]
|
||||
}
|
||||
|
||||
// 用于更新
|
||||
u.NeId = neId
|
||||
u.IMSI = imsi
|
||||
u.MSISDN = msisdn
|
||||
u.Tag = data["volte_tag"]
|
||||
u.VNI = data["VNI"]
|
||||
return u
|
||||
}
|
||||
|
||||
// SelectPage 分页查询数据库
|
||||
func (r *Service) SelectPage(query map[string]any) map[string]any {
|
||||
return r.volteRepository.SelectPage(query)
|
||||
}
|
||||
|
||||
// SelectList 查询数据库
|
||||
func (r *Service) SelectList(u VoLTEUser) []VoLTEUser {
|
||||
return r.volteRepository.SelectList(u)
|
||||
}
|
||||
|
||||
// Insert 从数据中读取后删除imsi再存入数据库
|
||||
// imsi长度15,ki长度32,opc长度0或者32
|
||||
func (r *Service) Insert(neId string, u VoLTEUser) int64 {
|
||||
uArr := r.dataByRedis(u.IMSI, neId)
|
||||
if len(uArr) > 0 {
|
||||
r.volteRepository.Delete(u.IMSI, neId)
|
||||
return r.volteRepository.Inserts(uArr)
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
// InsertData 导入文件数据 dataType目前两种:txt/csv
|
||||
func (r *Service) 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 {
|
||||
// keys volte:4600001000004*
|
||||
arr := r.dataByRedis(prefix+"*", neId)
|
||||
if len(arr) > 0 {
|
||||
r.volteRepository.DeletePrefixByIMSI(prefix, neId)
|
||||
num += r.volteRepository.Inserts(arr)
|
||||
}
|
||||
}
|
||||
return num
|
||||
}
|
||||
|
||||
// Delete 删除单个不重新加载
|
||||
func (r *Service) Delete(neId, imsi string) int64 {
|
||||
return r.volteRepository.Delete(imsi, neId)
|
||||
}
|
||||
|
||||
// LoadData 重新加载从imsi开始num的数据
|
||||
func (r *Service) LoadData(neId, imsi, num string) {
|
||||
startIMSI, _ := strconv.ParseInt(imsi, 10, 64)
|
||||
subNum, _ := strconv.ParseInt(num, 10, 64)
|
||||
var i int64
|
||||
for i = 0; i < subNum; i++ {
|
||||
keyIMSI := fmt.Sprintf("%015d", startIMSI+i)
|
||||
// 删除原数据
|
||||
r.volteRepository.Delete(keyIMSI, neId)
|
||||
arr := r.dataByRedis(keyIMSI, neId)
|
||||
if len(arr) < 1 {
|
||||
continue
|
||||
}
|
||||
r.volteRepository.Inserts(arr)
|
||||
}
|
||||
}
|
||||
|
||||
// ParseCommandParams 解析数据组成命令参数 msisdn=xx,xx=xx,...
|
||||
func (r *Service) ParseCommandParams(item VoLTEUser) string {
|
||||
var conditions []string
|
||||
if item.MSISDN != "" {
|
||||
conditions = append(conditions, fmt.Sprintf("msisdn=%s", item.MSISDN))
|
||||
}
|
||||
|
||||
if item.Tag != "" {
|
||||
conditions = append(conditions, fmt.Sprintf("volte=%s", item.Tag))
|
||||
}
|
||||
if item.VNI != "" {
|
||||
conditions = append(conditions, fmt.Sprintf("vni=%s", item.VNI))
|
||||
}
|
||||
|
||||
return strings.Join(conditions, ",")
|
||||
}
|
||||
234
features/ue/service/ims_user.go
Normal file
234
features/ue/service/ims_user.go
Normal file
@@ -0,0 +1,234 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"be.ems/features/ue/model"
|
||||
"be.ems/features/ue/repository"
|
||||
"be.ems/src/framework/database/redis"
|
||||
neService "be.ems/src/modules/network_element/service"
|
||||
)
|
||||
|
||||
// 实例化服务层 IMSUserService 结构体
|
||||
var NewIMSUserService = &IMSUserService{
|
||||
imsUserRepository: repository.NewIMSUserRepository,
|
||||
}
|
||||
|
||||
// VoLTE用户信息 服务层处理
|
||||
type IMSUserService struct {
|
||||
imsUserRepository *repository.IMSUserRepository // VoLTE用户信息数据信息
|
||||
}
|
||||
|
||||
// dataByRedis UDM签约用户 db:0 中 volte:*
|
||||
func (r *IMSUserService) dataByRedis(imsi, neId string) []model.IMSUser {
|
||||
arr := []model.IMSUser{}
|
||||
key := fmt.Sprintf("volte:%s", imsi)
|
||||
source := fmt.Sprintf("UDM_%s", neId)
|
||||
|
||||
// 网元主机的Redis客户端
|
||||
redisClient, err := neService.NewNeInfo.NeRunRedisClient("UDM", neId)
|
||||
if err != nil {
|
||||
return arr
|
||||
}
|
||||
defer func() {
|
||||
redisClient.Close()
|
||||
redis.ConnectPush(source, nil)
|
||||
}()
|
||||
redis.ConnectPush(source, redisClient.Client)
|
||||
|
||||
udmsdArr, err := redis.GetKeys(source, key)
|
||||
if err != nil {
|
||||
return arr
|
||||
}
|
||||
mkv, err := redis.GetHashBatch(source, udmsdArr)
|
||||
if err != nil {
|
||||
return arr
|
||||
}
|
||||
|
||||
for k, m := range mkv {
|
||||
var imsi, msisdn string
|
||||
KeyParts := strings.Split(k, ":")
|
||||
switch len(KeyParts) {
|
||||
case 0, 1:
|
||||
// 处理单个部分的情况
|
||||
continue
|
||||
case 2:
|
||||
// 处理两个部分的情况
|
||||
imsi = KeyParts[1]
|
||||
msisdn = "-"
|
||||
case 3:
|
||||
// 处理三个部分的情况
|
||||
imsi = KeyParts[1]
|
||||
msisdn = KeyParts[2]
|
||||
default:
|
||||
// 处理更多部分的情况
|
||||
imsi = KeyParts[1]
|
||||
msisdn = KeyParts[2]
|
||||
}
|
||||
|
||||
var vni string = "-"
|
||||
impiParts := strings.Split(m["impi"], "@")
|
||||
if len(impiParts) > 1 {
|
||||
vni = impiParts[1] // 输出: ims.mnc001.mcc110.3gppnetwork.org
|
||||
}
|
||||
a := model.IMSUser{
|
||||
NeId: neId,
|
||||
IMSI: imsi, // volte:360000100000130:8612300000130
|
||||
MSISDN: msisdn, // 8612300000130
|
||||
Tag: model.ParseCallTag(m["tag"]), // volte = tag
|
||||
VNI: vni, // ims.mnc001.mcc110.3gppnetwork.org
|
||||
}
|
||||
arr = append(arr, a)
|
||||
}
|
||||
return arr
|
||||
}
|
||||
|
||||
// ResetData 重置鉴权用户数据,清空数据库重新同步Redis数据
|
||||
func (r *IMSUserService) ResetData(neId string) int64 {
|
||||
subArr := r.dataByRedis("*", neId)
|
||||
// 数据清空后添加
|
||||
go r.imsUserRepository.ClearAndInsert(neId, subArr)
|
||||
return int64(len(subArr))
|
||||
}
|
||||
|
||||
// ParseInfo 解析单个用户imsi签约信息 data从命令MML得到的结果
|
||||
func (r *IMSUserService) ParseInfo(imsi, neId string, data map[string]string) model.IMSUser {
|
||||
u := r.imsUserRepository.SelectByIMSIAndNeID(imsi, neId)
|
||||
|
||||
msisdn := data["msisdn"]
|
||||
if imsMsisdnLen := strings.Index(msisdn, ","); imsMsisdnLen != -1 {
|
||||
msisdn = msisdn[:imsMsisdnLen]
|
||||
}
|
||||
var vni string = "-"
|
||||
impiParts := strings.Split(data["impi"], "@")
|
||||
if len(impiParts) > 1 {
|
||||
vni = impiParts[1] // 输出: ims.mnc001.mcc110.3gppnetwork.org
|
||||
}
|
||||
|
||||
// 用于更新
|
||||
u.NeId = neId
|
||||
u.IMSI = imsi
|
||||
u.MSISDN = msisdn
|
||||
u.Tag = model.ParseCallTag(data["volte_tag"])
|
||||
u.VNI = vni
|
||||
return u
|
||||
}
|
||||
|
||||
// SelectPage 分页查询数据库
|
||||
func (r *IMSUserService) SelectPage(query map[string]any) map[string]any {
|
||||
return r.imsUserRepository.SelectPage(query)
|
||||
}
|
||||
|
||||
// SelectList 查询数据库
|
||||
func (r *IMSUserService) SelectList(u model.IMSUser) []model.IMSUser {
|
||||
return r.imsUserRepository.SelectList(u)
|
||||
}
|
||||
|
||||
// Insert 从数据中读取后删除imsi再存入数据库
|
||||
// imsi长度15,ki长度32,opc长度0或者32
|
||||
func (r *IMSUserService) Insert(neId string, u model.IMSUser) int64 {
|
||||
uArr := r.dataByRedis(u.IMSI+":*", neId)
|
||||
if len(uArr) > 0 {
|
||||
r.imsUserRepository.Delete(u.IMSI, neId)
|
||||
return r.imsUserRepository.Inserts(uArr)
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
// InsertData 导入文件数据 dataType目前两种:txt/csv
|
||||
func (r *IMSUserService) 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 {
|
||||
// keys volte:4600001000004*
|
||||
arr := r.dataByRedis(prefix+"*", neId)
|
||||
if len(arr) > 0 {
|
||||
r.imsUserRepository.DeletePrefixByIMSI(prefix, neId)
|
||||
num += r.imsUserRepository.Inserts(arr)
|
||||
}
|
||||
}
|
||||
return num
|
||||
}
|
||||
|
||||
// Delete 删除单个不重新加载
|
||||
func (r *IMSUserService) Delete(neId, imsi string) int64 {
|
||||
return r.imsUserRepository.Delete(imsi, neId)
|
||||
}
|
||||
|
||||
// LoadData 重新加载从imsi开始num的数据
|
||||
func (r *IMSUserService) LoadData(neId, imsi, num string) {
|
||||
startIMSI, _ := strconv.ParseInt(imsi, 10, 64)
|
||||
subNum, _ := strconv.ParseInt(num, 10, 64)
|
||||
var i int64
|
||||
for i = 0; i < subNum; i++ {
|
||||
var keyIMSI string
|
||||
if len(imsi) == model.IMSI_MAX_LENGTH {
|
||||
keyIMSI = fmt.Sprintf("%015d", startIMSI+i)
|
||||
} else {
|
||||
// 处理不满15位的IMSI, tag=TAG_VoIP
|
||||
keyIMSI = fmt.Sprintf("%d", startIMSI+i)
|
||||
}
|
||||
|
||||
// 删除原数据
|
||||
r.imsUserRepository.Delete(keyIMSI, neId)
|
||||
arr := r.dataByRedis(keyIMSI+":*", neId)
|
||||
if len(arr) < 1 {
|
||||
continue
|
||||
}
|
||||
r.imsUserRepository.Inserts(arr)
|
||||
}
|
||||
}
|
||||
|
||||
// ParseCommandParams 解析数据组成命令参数 msisdn=xx,xx=xx,...
|
||||
func (r *IMSUserService) ParseCommandParams(item model.IMSUser) string {
|
||||
var conditions []string
|
||||
if item.MSISDN != "" {
|
||||
conditions = append(conditions, fmt.Sprintf("msisdn=%s", item.MSISDN))
|
||||
}
|
||||
|
||||
if item.Tag != model.ParseCallTag("") {
|
||||
conditions = append(conditions, fmt.Sprintf("volte=%d", item.Tag))
|
||||
}
|
||||
if item.VNI != "" {
|
||||
conditions = append(conditions, fmt.Sprintf("vni=%s", item.VNI))
|
||||
}
|
||||
|
||||
return strings.Join(conditions, ",")
|
||||
}
|
||||
|
||||
// ResetDataWithResult 重置鉴权用户数据,清空数据库重新同步Redis数据
|
||||
// 通过 channel 返回 ClearAndInsert 的执行结果
|
||||
func (r *IMSUserService) ResetDataWithResult(neId string) chan int64 {
|
||||
arr := r.dataByRedis("*", neId)
|
||||
resultCh := make(chan int64, 1)
|
||||
go func() {
|
||||
resultCh <- r.imsUserRepository.ClearAndInsert(neId, arr)
|
||||
}()
|
||||
return resultCh
|
||||
}
|
||||
186
features/ue/service/voip_auth.go
Normal file
186
features/ue/service/voip_auth.go
Normal file
@@ -0,0 +1,186 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"be.ems/features/ue/model"
|
||||
"be.ems/features/ue/repository"
|
||||
"be.ems/src/framework/database/redis"
|
||||
neService "be.ems/src/modules/network_element/service"
|
||||
)
|
||||
|
||||
// 实例化服务层 VoIPAuthService 结构体
|
||||
var NewVoIPAuthService = &VoIPAuthService{
|
||||
voipAuthRepository: repository.NewVoIPAuthRepository,
|
||||
}
|
||||
|
||||
// VoLTE用户信息 服务层处理
|
||||
type VoIPAuthService struct {
|
||||
voipAuthRepository *repository.VoIPAuthRepository // VoLTE用户信息数据信息
|
||||
}
|
||||
|
||||
// dataByRedis VoIP鉴权数据 db:0 中 voip:*
|
||||
func (r *VoIPAuthService) dataByRedis(userName, neId string) []model.VoIPAuth {
|
||||
arr := []model.VoIPAuth{}
|
||||
key := fmt.Sprintf("voip:%s", userName)
|
||||
source := fmt.Sprintf("UDM_%s", neId)
|
||||
|
||||
// 网元主机的Redis客户端
|
||||
redisClient, err := neService.NewNeInfo.NeRunRedisClient("UDM", neId)
|
||||
if err != nil {
|
||||
return arr
|
||||
}
|
||||
defer func() {
|
||||
redisClient.Close()
|
||||
redis.ConnectPush(source, nil)
|
||||
}()
|
||||
redis.ConnectPush(source, redisClient.Client)
|
||||
|
||||
udmsdArr, err := redis.GetKeys(source, key)
|
||||
if err != nil {
|
||||
return arr
|
||||
}
|
||||
mkv, err := redis.GetHashBatch(source, udmsdArr)
|
||||
if err != nil {
|
||||
return arr
|
||||
}
|
||||
|
||||
for k, m := range mkv {
|
||||
var userName string
|
||||
KeyParts := strings.Split(k, ":")
|
||||
if len(KeyParts) > 1 {
|
||||
userName = KeyParts[1]
|
||||
}
|
||||
|
||||
a := model.VoIPAuth{
|
||||
NeId: neId,
|
||||
UserName: userName, // userName
|
||||
Password: m["password"], //
|
||||
}
|
||||
arr = append(arr, a)
|
||||
}
|
||||
return arr
|
||||
}
|
||||
|
||||
// ResetData 重置鉴权用户数据,清空数据库重新同步Redis数据
|
||||
func (r *VoIPAuthService) ResetData(neId string) int64 {
|
||||
subArr := r.dataByRedis("*", neId)
|
||||
// 数据清空后添加
|
||||
go r.voipAuthRepository.ClearAndInsert(neId, subArr)
|
||||
return int64(len(subArr))
|
||||
}
|
||||
|
||||
// ParseInfo 解析单个用户userName信息 data从命令MML得到的结果
|
||||
func (r *VoIPAuthService) ParseInfo(userName, neId string, data map[string]string) model.VoIPAuth {
|
||||
u := r.voipAuthRepository.SelectByUserNameAndNeID(userName, neId)
|
||||
password := data["password"]
|
||||
|
||||
// 用于更新
|
||||
u.NeId = neId
|
||||
u.UserName = userName
|
||||
u.Password = password
|
||||
return u
|
||||
}
|
||||
|
||||
// SelectPage 分页查询数据库
|
||||
func (r *VoIPAuthService) SelectPage(query map[string]any) map[string]any {
|
||||
return r.voipAuthRepository.SelectPage(query)
|
||||
}
|
||||
|
||||
// SelectList 查询数据库
|
||||
func (r *VoIPAuthService) SelectList(u model.VoIPAuth) []model.VoIPAuth {
|
||||
return r.voipAuthRepository.SelectList(u)
|
||||
}
|
||||
|
||||
// Insert 从数据中读取后删除userName再存入数据库
|
||||
func (r *VoIPAuthService) Insert(neId string, u model.VoIPAuth) int64 {
|
||||
uArr := r.dataByRedis(u.UserName, neId)
|
||||
if len(uArr) > 0 {
|
||||
r.voipAuthRepository.Delete(u.UserName, neId)
|
||||
return r.voipAuthRepository.Inserts(uArr)
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
// InsertData 导入文件数据 dataType目前两种:txt/csv
|
||||
func (r *VoIPAuthService) InsertData(neId, dataType string, data any) int64 {
|
||||
userNames := make(map[string]struct{})
|
||||
|
||||
if dataType == "csv" {
|
||||
for _, v := range data.([]map[string]string) {
|
||||
userName := v["userName"]
|
||||
// if len(userName) < 6 {
|
||||
// continue
|
||||
// }
|
||||
// prefix := userName[:len(userName)-4]
|
||||
userNames[userName] = struct{}{}
|
||||
}
|
||||
}
|
||||
if dataType == "txt" {
|
||||
for _, v := range data.([][]string) {
|
||||
userName := v[0]
|
||||
// if len(userName) < 6 {
|
||||
// continue
|
||||
// }
|
||||
// prefix := userName[:len(userName)-4]
|
||||
userNames[userName] = struct{}{}
|
||||
}
|
||||
}
|
||||
|
||||
// 根据前缀重新加载插入
|
||||
var num int64 = 0
|
||||
for userName := range userNames {
|
||||
// keys voip:11111
|
||||
arr := r.dataByRedis(userName, neId)
|
||||
if len(arr) > 0 {
|
||||
r.voipAuthRepository.DeleteByUserName(userName, neId)
|
||||
num += r.voipAuthRepository.Inserts(arr)
|
||||
}
|
||||
}
|
||||
return num
|
||||
}
|
||||
|
||||
// Delete 删除单个不重新加载
|
||||
func (r *VoIPAuthService) Delete(neId, userName string) int64 {
|
||||
return r.voipAuthRepository.Delete(userName, neId)
|
||||
}
|
||||
|
||||
// LoadData 重新加载从userName开始num的数据
|
||||
func (r *VoIPAuthService) LoadData(neId, userName, num string) {
|
||||
startUserName, _ := strconv.ParseInt(userName, 10, 64)
|
||||
subNum, _ := strconv.ParseInt(num, 10, 64)
|
||||
var i int64
|
||||
for i = 0; i < subNum; i++ {
|
||||
keyUserName := fmt.Sprintf("%d", startUserName+i)
|
||||
// 删除原数据
|
||||
r.voipAuthRepository.Delete(keyUserName, neId)
|
||||
arr := r.dataByRedis(keyUserName, neId)
|
||||
if len(arr) < 1 {
|
||||
continue
|
||||
}
|
||||
r.voipAuthRepository.Inserts(arr)
|
||||
}
|
||||
}
|
||||
|
||||
// ParseCommandParams 解析数据组成命令参数 msisdn=xx,xx=xx,...
|
||||
func (r *VoIPAuthService) ParseCommandParams(item model.VoIPAuth) string {
|
||||
var conditions []string
|
||||
if item.Password != "" {
|
||||
conditions = append(conditions, fmt.Sprintf("password=%s", item.Password))
|
||||
}
|
||||
|
||||
return strings.Join(conditions, ",")
|
||||
}
|
||||
|
||||
// ResetDataWithResult 重置鉴权用户数据,清空数据库重新同步Redis数据
|
||||
// 通过 channel 返回 ClearAndInsert 的执行结果
|
||||
func (r *VoIPAuthService) ResetDataWithResult(neId string) chan int64 {
|
||||
arr := r.dataByRedis("*", neId)
|
||||
resultCh := make(chan int64, 1)
|
||||
go func() {
|
||||
resultCh <- r.voipAuthRepository.ClearAndInsert(neId, arr)
|
||||
}()
|
||||
return resultCh
|
||||
}
|
||||
4
go.mod
4
go.mod
@@ -4,7 +4,6 @@ go 1.22.0
|
||||
|
||||
require (
|
||||
github.com/dlclark/regexp2 v1.11.4
|
||||
github.com/dustin/go-humanize v1.0.0
|
||||
github.com/gin-gonic/gin v1.10.0
|
||||
github.com/go-resty/resty/v2 v2.14.0
|
||||
github.com/go-sql-driver/mysql v1.8.1
|
||||
@@ -13,7 +12,6 @@ require (
|
||||
github.com/gorilla/mux v1.8.1
|
||||
github.com/gorilla/websocket v1.5.3
|
||||
github.com/gosnmp/gosnmp v1.38.0
|
||||
github.com/jlaffaye/ftp v0.2.0
|
||||
github.com/lestrrat/go-file-rotatelogs v0.0.0-20180223000712-d3151e2a480f
|
||||
github.com/linxGnu/gosmpp v0.3.0
|
||||
github.com/matoous/go-nanoid/v2 v2.1.0
|
||||
@@ -46,8 +44,6 @@ require (
|
||||
)
|
||||
|
||||
require (
|
||||
github.com/hashicorp/errwrap v1.1.0 // indirect
|
||||
github.com/hashicorp/go-multierror v1.1.1 // indirect
|
||||
filippo.io/edwards25519 v1.1.0 // indirect
|
||||
github.com/KyleBanks/depth v1.2.1 // indirect
|
||||
github.com/beorn7/perks v1.0.1 // indirect
|
||||
|
||||
7
go.sum
7
go.sum
@@ -117,11 +117,6 @@ github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/ad
|
||||
github.com/gosnmp/gosnmp v1.36.2-0.20231009064202-d306ed5aa998/go.mod h1:O938QjIS4vpSag1UTcnnBq9MfNmimuOGtvQsT1NbErc=
|
||||
github.com/gosnmp/gosnmp v1.38.0 h1:I5ZOMR8kb0DXAFg/88ACurnuwGwYkXWq3eLpJPHMEYc=
|
||||
github.com/gosnmp/gosnmp v1.38.0/go.mod h1:FE+PEZvKrFz9afP9ii1W3cprXuVZ17ypCcyyfYuu5LY=
|
||||
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
|
||||
github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I=
|
||||
github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
|
||||
github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo=
|
||||
github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM=
|
||||
github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
|
||||
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
|
||||
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
|
||||
@@ -131,8 +126,6 @@ github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD
|
||||
github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
|
||||
github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
|
||||
github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
|
||||
github.com/jlaffaye/ftp v0.2.0 h1:lXNvW7cBu7R/68bknOX3MrRIIqZ61zELs1P2RAiA3lg=
|
||||
github.com/jlaffaye/ftp v0.2.0/go.mod h1:is2Ds5qkhceAPy2xD6RLI6hmp/qysSoymZ+Z2uTnspI=
|
||||
github.com/jonboulle/clockwork v0.4.0 h1:p4Cf1aMWXnXAUh8lVfewRBx1zaTSYKrKMF2g3ST4RZ4=
|
||||
github.com/jonboulle/clockwork v0.4.0/go.mod h1:xgRqUGwRcjKCO1vbZUEtSLrqKoPSsUpK7fnezOII0kc=
|
||||
github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
|
||||
|
||||
@@ -8,21 +8,19 @@ import (
|
||||
"os"
|
||||
"os/user"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"syscall"
|
||||
|
||||
"github.com/dustin/go-humanize"
|
||||
)
|
||||
|
||||
type FileInfo struct {
|
||||
FileType string `json:"fileType"` // 文件类型
|
||||
FileMode string `json:"fileMode"` // 文件的权限
|
||||
LinkCount int64 `json:"linkCount"` // 硬链接数目
|
||||
Owner string `json:"owner"` // 所属用户
|
||||
Group string `json:"group"` // 所属组
|
||||
Size string `json:"size"` // 文件的大小
|
||||
ModifiedTime int64 `json:"modifiedTime"` // 最后修改时间,单位为秒
|
||||
FileName string `json:"fileName"` // 文件的名称
|
||||
FileType string `json:"fileType"` // file type: file/directory
|
||||
FileMode string `json:"fileMode"` // file mode
|
||||
LinkCount int64 `json:"linkCount"` // link count
|
||||
Owner string `json:"owner"` // owner
|
||||
Group string `json:"group"` // group
|
||||
Size int64 `json:"size"` // size: xx byte
|
||||
ModifiedTime int64 `json:"modifiedTime"` // last modified time:seconds
|
||||
FilePath string `json:"filePath"` // file path
|
||||
FileName string `json:"fileName"` // file name
|
||||
}
|
||||
|
||||
func GetFileInfo(dir, suffix string) ([]FileInfo, error) {
|
||||
@@ -58,15 +56,15 @@ func GetFileInfo(dir, suffix string) ([]FileInfo, error) {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
humanReadableSize := humanize.Bytes(uint64(info.Size()))
|
||||
fileInfo := FileInfo{
|
||||
FileType: fileType,
|
||||
FileMode: info.Mode().String(),
|
||||
LinkCount: int64(info.Sys().(*syscall.Stat_t).Nlink),
|
||||
Owner: userInfo.Username,
|
||||
Group: groupInfo.Name,
|
||||
Size: strings.ToUpper(humanReadableSize),
|
||||
Size: info.Size(),
|
||||
ModifiedTime: info.ModTime().Unix(),
|
||||
FilePath: dir,
|
||||
FileName: info.Name(),
|
||||
}
|
||||
files = append(files, fileInfo)
|
||||
|
||||
2
makefile
2
makefile
@@ -3,7 +3,7 @@
|
||||
ProjectL = omc
|
||||
ProjectU = OMC
|
||||
PROJECT = $(ProjectL)
|
||||
VERSION = 2.2502.1
|
||||
VERSION = 2.2503.6
|
||||
RelDate = `date +%Y%m%d`
|
||||
Release = $(RelDate)
|
||||
RelVer = $(VERSION)-$(RelDate)
|
||||
|
||||
2
mkpkg.sh
2
mkpkg.sh
@@ -2,7 +2,7 @@
|
||||
|
||||
ProcList="restagent sshsvc"
|
||||
ProjectL=omc
|
||||
VERSION=2.2502.1
|
||||
VERSION=2.2503.6
|
||||
RelDate=`date +%Y%m%d`
|
||||
Release=${RelDate}
|
||||
RelVer=${VERSION}-${RelDate}
|
||||
|
||||
@@ -20,7 +20,7 @@ pprof:
|
||||
rest:
|
||||
- ipv4: 0.0.0.0
|
||||
ipv6:
|
||||
port: 33030
|
||||
port: 33040
|
||||
- ipv4: 0.0.0.0
|
||||
ipv6:
|
||||
port: 33443
|
||||
@@ -31,7 +31,7 @@ rest:
|
||||
keyFile: ./etc/certs/omc-server.key
|
||||
|
||||
webServer:
|
||||
enabled: true
|
||||
enabled: false
|
||||
rootDir: d:/omc.git/fe.ems.vue3/dist # front-end build dist directory
|
||||
listen:
|
||||
- addr: :80
|
||||
@@ -46,9 +46,9 @@ webServer:
|
||||
database:
|
||||
type: mysql
|
||||
user: root
|
||||
password: 1000omc@kp!
|
||||
host: 127.0.0.1
|
||||
port: 33066
|
||||
password: "1000omc@kp!"
|
||||
host: "192.168.9.58"
|
||||
port: 13306
|
||||
name: omc_db
|
||||
connParam: charset=utf8mb4&collation=utf8mb4_general_ci&parseTime=True&interpolateParams=True
|
||||
backup: ./database
|
||||
@@ -58,8 +58,8 @@ redis:
|
||||
dataSource:
|
||||
# OMC system db
|
||||
default:
|
||||
port: 6379 # Redis port
|
||||
host: "127.0.0.1" # Redis host
|
||||
port: 16379 # Redis port
|
||||
host: "192.168.9.58" # Redis host
|
||||
password: "helloearth"
|
||||
db: 10 # Redis db_num
|
||||
# used to specify the default data source for multiple data resourece
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# Makefile for rest agent project
|
||||
|
||||
PROJECT = OMC
|
||||
VERSION = 2.2502.1
|
||||
VERSION = 2.2503.6
|
||||
PLATFORM = amd64
|
||||
ARMPLATFORM = aarch64
|
||||
BUILDDIR = ../../build
|
||||
|
||||
@@ -5,9 +5,9 @@ import (
|
||||
|
||||
"be.ems/src/framework/config"
|
||||
"be.ems/src/framework/cron"
|
||||
"be.ems/src/framework/datasource"
|
||||
"be.ems/src/framework/database/db"
|
||||
"be.ems/src/framework/database/redis"
|
||||
"be.ems/src/framework/logger"
|
||||
"be.ems/src/framework/redis"
|
||||
)
|
||||
|
||||
//go:embed config/*.yaml
|
||||
@@ -23,7 +23,7 @@ func ConfigurationInit() {
|
||||
// 初始程序日志
|
||||
logger.InitLogger()
|
||||
// 连接数据库实例
|
||||
datasource.Connect()
|
||||
db.Connect()
|
||||
// 连接Redis实例
|
||||
redis.Connect()
|
||||
// 启动调度任务实例
|
||||
@@ -37,7 +37,7 @@ func ConfigurationClose() {
|
||||
// 关闭Redis实例
|
||||
redis.Close()
|
||||
// 关闭数据库实例
|
||||
datasource.Close()
|
||||
db.Close()
|
||||
// 关闭程序日志
|
||||
logger.Close()
|
||||
}
|
||||
|
||||
9
src/framework/constants/alarm.go
Normal file
9
src/framework/constants/alarm.go
Normal file
@@ -0,0 +1,9 @@
|
||||
package constants
|
||||
|
||||
// 告警 alarmCode 常量
|
||||
const (
|
||||
// ALARM_STATE_CHECK 告警-状态检查
|
||||
ALARM_STATE_CHECK = 10000
|
||||
// ALARM_EVENT_REBOOT 事件-网元重启
|
||||
ALARM_EVENT_REBOOT = 9000
|
||||
)
|
||||
25
src/framework/constants/cache_key.go
Normal file
25
src/framework/constants/cache_key.go
Normal file
@@ -0,0 +1,25 @@
|
||||
package constants
|
||||
|
||||
// 缓存的key常量
|
||||
const (
|
||||
// CACHE_LOGIN_TOKEN 登录用户
|
||||
CACHE_LOGIN_TOKEN = "login_tokens"
|
||||
// CACHE_CAPTCHA_CODE 验证码
|
||||
CACHE_CAPTCHA_CODE = "captcha_codes"
|
||||
// CACHE_SYS_CONFIG 参数管理
|
||||
CACHE_SYS_CONFIG = "sys_config"
|
||||
// CACHE_SYS_DICT 字典管理
|
||||
CACHE_SYS_DICT = "sys_dict"
|
||||
// CACHE_REPEAT_SUBMIT 防重提交
|
||||
CACHE_REPEAT_SUBMIT = "repeat_submit"
|
||||
// CACHE_RATE_LIMIT 限流
|
||||
CACHE_RATE_LIMIT = "rate_limit"
|
||||
// CACHE_PWD_ERR_COUNT 登录账户密码错误次数
|
||||
CACHE_PWD_ERR_COUNT = "pwd_err_count"
|
||||
// CACHE_I18N 国际化语言管理
|
||||
CACHE_I18N = "i18n"
|
||||
// CACHE_NE_INFO 网元信息管理
|
||||
CACHE_NE_INFO = "ne_info"
|
||||
// CACHE_NE_DATA 网元数据管理
|
||||
CACHE_NE_DATA = "ne_data"
|
||||
)
|
||||
11
src/framework/constants/captcha.go
Normal file
11
src/framework/constants/captcha.go
Normal file
@@ -0,0 +1,11 @@
|
||||
package constants
|
||||
|
||||
// 验证码常量信息
|
||||
const (
|
||||
// CAPTCHA_EXPIRATION 验证码有效期,单位秒
|
||||
CAPTCHA_EXPIRATION = 2 * 60
|
||||
// CAPTCHA_TYPE_CHAR 验证码类型-数值计算
|
||||
CAPTCHA_TYPE_CHAR = "char"
|
||||
// CAPTCHA_TYPE_MATH 验证码类型-字符验证
|
||||
CAPTCHA_TYPE_MATH = "math"
|
||||
)
|
||||
14
src/framework/constants/common.go
Normal file
14
src/framework/constants/common.go
Normal file
@@ -0,0 +1,14 @@
|
||||
package constants
|
||||
|
||||
const (
|
||||
// STATUS_YES 通用状态标识-正常/成功/是
|
||||
STATUS_YES = "1"
|
||||
// STATUS_NO 通用状态标识-停用/失败/否
|
||||
STATUS_NO = "0"
|
||||
)
|
||||
|
||||
// CTX_LOGIN_USER 上下文信息-登录用户
|
||||
const CTX_LOGIN_USER = "ctx:login_user"
|
||||
|
||||
// 启动-引导系统初始
|
||||
const LAUNCH_BOOTLOADER = "bootloader"
|
||||
21
src/framework/constants/menu.go
Normal file
21
src/framework/constants/menu.go
Normal file
@@ -0,0 +1,21 @@
|
||||
package constants
|
||||
|
||||
// 系统菜单常量信息
|
||||
const (
|
||||
// MENU_COMPONENT_LAYOUT_BASIC 组件布局类型-基础布局组件标识
|
||||
MENU_COMPONENT_LAYOUT_BASIC = "BasicLayout"
|
||||
// MENU_COMPONENT_LAYOUT_BLANK 组件布局类型-空白布局组件标识
|
||||
MENU_COMPONENT_LAYOUT_BLANK = "BlankLayout"
|
||||
// MENU_COMPONENT_LAYOUT_LINK 组件布局类型-内链接布局组件标识
|
||||
MENU_COMPONENT_LAYOUT_LINK = "LinkLayout"
|
||||
|
||||
// MENU_TYPE_DIR 菜单类型-目录
|
||||
MENU_TYPE_DIR = "D"
|
||||
// MENU_TYPE_MENU 菜单类型-菜单
|
||||
MENU_TYPE_MENU = "M"
|
||||
// MENU_TYPE_BUTTON 菜单类型-按钮
|
||||
MENU_TYPE_BUTTON = "B"
|
||||
|
||||
// MENU_PATH_INLINE 菜单内嵌地址标识-带/前缀
|
||||
MENU_PATH_INLINE = "/inline"
|
||||
)
|
||||
24
src/framework/constants/role_data_scope.go
Normal file
24
src/framework/constants/role_data_scope.go
Normal file
@@ -0,0 +1,24 @@
|
||||
package constants
|
||||
|
||||
// 系统角色数据范围常量
|
||||
const (
|
||||
// ROLE_SCOPE_ALL 全部数据权限
|
||||
ROLE_SCOPE_ALL = "1"
|
||||
// ROLE_SCOPE_CUSTOM 自定数据权限
|
||||
ROLE_SCOPE_CUSTOM = "2"
|
||||
// ROLE_SCOPE_DEPT 部门数据权限
|
||||
ROLE_SCOPE_DEPT = "3"
|
||||
// ROLE_SCOPE_DEPT_CHILD 部门及以下数据权限
|
||||
ROLE_SCOPE_DEPT_CHILD = "4"
|
||||
// ROLE_SCOPE_SELF 仅本人数据权限
|
||||
ROLE_SCOPE_SELF = "5"
|
||||
)
|
||||
|
||||
// ROLE_SCOPE_DATA 系统角色数据范围映射
|
||||
var ROLE_SCOPE_DATA = map[string]string{
|
||||
ROLE_SCOPE_ALL: "全部数据权限",
|
||||
ROLE_SCOPE_CUSTOM: "自定数据权限",
|
||||
ROLE_SCOPE_DEPT: "部门数据权限",
|
||||
ROLE_SCOPE_DEPT_CHILD: "部门及以下数据权限",
|
||||
ROLE_SCOPE_SELF: "仅本人数据权限",
|
||||
}
|
||||
12
src/framework/constants/system.go
Normal file
12
src/framework/constants/system.go
Normal file
@@ -0,0 +1,12 @@
|
||||
package constants
|
||||
|
||||
// 系统常量信息
|
||||
|
||||
// SYS_ROLE_SYSTEM_ID 系统管理员-系统指定角色ID
|
||||
const SYS_ROLE_SYSTEM_ID = 1
|
||||
|
||||
// SYS_ROLE_SYSTEM_KEY 系统管理员-系统指定角色KEY
|
||||
const SYS_ROLE_SYSTEM_KEY = "system"
|
||||
|
||||
// SYS_PERMISSION_SYSTEM 系统管理员-系统指定权限
|
||||
const SYS_PERMISSION_SYSTEM = "*:*:*"
|
||||
24
src/framework/constants/token.go
Normal file
24
src/framework/constants/token.go
Normal file
@@ -0,0 +1,24 @@
|
||||
package constants
|
||||
|
||||
// 令牌常量信息
|
||||
|
||||
// HEADER_PREFIX 令牌-请求头标识前缀
|
||||
const HEADER_PREFIX = "Bearer "
|
||||
|
||||
// HEADER_KEY 令牌-请求头标识
|
||||
const HEADER_KEY = "Authorization"
|
||||
|
||||
// JWT_UUID 令牌-JWT唯一标识字段
|
||||
const JWT_UUID = "uuid"
|
||||
|
||||
// JWT_USER_ID 令牌-JWT标识用户主键字段
|
||||
const JWT_USER_ID = "user_id"
|
||||
|
||||
// JWT_USER_NAME 令牌-JWT标识用户登录账号字段
|
||||
const JWT_USER_NAME = "user_name"
|
||||
|
||||
// NMS北向使用-数据响应字段和请求头授权
|
||||
const ACCESS_TOKEN = "accessToken"
|
||||
|
||||
// WS请求使用-数据响应字段和请求头授权
|
||||
const ACCESS_TOKEN_QUERY = "access_token"
|
||||
36
src/framework/constants/upload_sub_path.go
Normal file
36
src/framework/constants/upload_sub_path.go
Normal file
@@ -0,0 +1,36 @@
|
||||
package constants
|
||||
|
||||
// 文件上传-子路径类型常量
|
||||
const (
|
||||
// UPLOAD_DEFAULT 默认
|
||||
UPLOAD_DEFAULT = "default"
|
||||
// UPLOAD_AVATAR 头像
|
||||
UPLOAD_AVATAR = "avatar"
|
||||
// UPLOAD_IMPORT 导入
|
||||
UPLOAD_IMPORT = "import"
|
||||
// UPLOAD_EXPORT 导出
|
||||
UPLOAD_EXPORT = "export"
|
||||
// UPLOAD_COMMON 通用上传
|
||||
UPLOAD_COMMON = "common"
|
||||
// UPLOAD_DOWNLOAD 下载
|
||||
UPLOAD_DOWNLOAD = "download"
|
||||
// UPLOAD_CHUNK 切片
|
||||
UPLOAD_CHUNK = "chunk"
|
||||
// UPLOAD_SOFTWARE 软件包
|
||||
UPLOAD_SOFTWARE = "software"
|
||||
// UPLOAD_LICENSE 授权文件
|
||||
UPLOAD_LICENSE = "license"
|
||||
)
|
||||
|
||||
// UPLOAD_SUB_PATH 子路径类型映射
|
||||
var UPLOAD_SUB_PATH = map[string]string{
|
||||
UPLOAD_DEFAULT: "默认",
|
||||
UPLOAD_AVATAR: "头像",
|
||||
UPLOAD_IMPORT: "导入",
|
||||
UPLOAD_EXPORT: "导出",
|
||||
UPLOAD_COMMON: "通用上传",
|
||||
UPLOAD_DOWNLOAD: "下载",
|
||||
UPLOAD_CHUNK: "切片",
|
||||
UPLOAD_SOFTWARE: "软件包",
|
||||
UPLOAD_LICENSE: "授权文件",
|
||||
}
|
||||
207
src/framework/database/db/db.go
Normal file
207
src/framework/database/db/db.go
Normal file
@@ -0,0 +1,207 @@
|
||||
package db
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
"regexp"
|
||||
"time"
|
||||
|
||||
"gorm.io/driver/mysql"
|
||||
"gorm.io/gorm"
|
||||
gormLog "gorm.io/gorm/logger"
|
||||
|
||||
"be.ems/src/framework/config"
|
||||
"be.ems/src/framework/logger"
|
||||
"be.ems/src/framework/utils/parse"
|
||||
)
|
||||
|
||||
// 数据库连接实例
|
||||
var dbMap = make(map[string]*gorm.DB)
|
||||
|
||||
type dialectInfo struct {
|
||||
dialectic gorm.Dialector
|
||||
logging bool
|
||||
}
|
||||
|
||||
// 载入数据库连接
|
||||
func loadDialect() map[string]dialectInfo {
|
||||
dialects := make(map[string]dialectInfo)
|
||||
|
||||
// 读取数据源配置
|
||||
datasource := config.Get("gorm.datasource").(map[string]any)
|
||||
for key, value := range datasource {
|
||||
item := value.(map[string]any)
|
||||
// 数据库类型对应的数据库连接
|
||||
switch item["type"] {
|
||||
case "mysql":
|
||||
dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local",
|
||||
item["username"],
|
||||
item["password"],
|
||||
item["host"],
|
||||
item["port"],
|
||||
item["database"],
|
||||
)
|
||||
dialects[key] = dialectInfo{
|
||||
dialectic: mysql.Open(dsn),
|
||||
logging: parse.Boolean(item["logging"]),
|
||||
}
|
||||
default:
|
||||
logger.Warnf("%s: %v\n Not Load DB Config Type", key, item)
|
||||
}
|
||||
}
|
||||
|
||||
return dialects
|
||||
}
|
||||
|
||||
// 载入连接日志配置
|
||||
func loadLogger() gormLog.Interface {
|
||||
newLogger := gormLog.New(
|
||||
log.New(os.Stdout, "[GORM] ", log.LstdFlags), // 将日志输出到控制台
|
||||
gormLog.Config{
|
||||
SlowThreshold: time.Second, // Slow SQL 阈值
|
||||
LogLevel: gormLog.Info, // 日志级别 Silent不输出任何日志
|
||||
ParameterizedQueries: false, // 参数化查询SQL 用实际值带入?的执行语句
|
||||
Colorful: false, // 彩色日志输出
|
||||
},
|
||||
)
|
||||
return newLogger
|
||||
}
|
||||
|
||||
// Connect 连接数据库实例
|
||||
func Connect() {
|
||||
// 遍历进行连接数据库实例
|
||||
for key, info := range loadDialect() {
|
||||
opts := &gorm.Config{
|
||||
Logger: gormLog.Discard,
|
||||
}
|
||||
// 是否需要日志输出
|
||||
if info.logging {
|
||||
opts.Logger = loadLogger()
|
||||
}
|
||||
// 创建连接
|
||||
db, err := gorm.Open(info.dialectic, opts)
|
||||
if err != nil {
|
||||
logger.Errorf("failed error db connect: %s", err)
|
||||
continue
|
||||
}
|
||||
// 获取底层 SQL 数据库连接
|
||||
sqlDB, err := db.DB()
|
||||
if err != nil {
|
||||
logger.Fatalf("failed error underlying SQL database: %v", err)
|
||||
}
|
||||
// 测试数据库连接
|
||||
err = sqlDB.Ping()
|
||||
if err != nil {
|
||||
logger.Fatalf("failed error ping database: %v", err)
|
||||
}
|
||||
// SetMaxIdleConns 用于设置连接池中空闲连接的最大数量。
|
||||
sqlDB.SetMaxIdleConns(10)
|
||||
// SetMaxOpenConns 设置打开数据库连接的最大数量。
|
||||
sqlDB.SetMaxOpenConns(100)
|
||||
// SetConnMaxLifetime 设置了连接可复用的最大时间。
|
||||
sqlDB.SetConnMaxLifetime(time.Hour)
|
||||
logger.Infof("database %s connection is successful.", key)
|
||||
dbMap[key] = db
|
||||
}
|
||||
}
|
||||
|
||||
// Close 关闭数据库实例
|
||||
func Close() {
|
||||
for _, db := range dbMap {
|
||||
sqlDB, err := db.DB()
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
if err := sqlDB.Close(); err != nil {
|
||||
logger.Errorf("fatal error db close: %s", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// DB 获取数据源
|
||||
//
|
||||
// source-数据源
|
||||
func DB(source string) *gorm.DB {
|
||||
// 不指定时获取默认实例
|
||||
if source == "" {
|
||||
source = config.Get("gorm.defaultDataSourceName").(string)
|
||||
}
|
||||
db := dbMap[source]
|
||||
if db == nil {
|
||||
logger.Errorf("not database source: %s", source)
|
||||
return nil
|
||||
}
|
||||
return db
|
||||
}
|
||||
|
||||
// Names 获取数据源名称列表
|
||||
func Names() []string {
|
||||
var names []string
|
||||
for key := range dbMap {
|
||||
names = append(names, key)
|
||||
}
|
||||
return names
|
||||
}
|
||||
|
||||
// RawDB 原生语句查询
|
||||
//
|
||||
// source-数据源
|
||||
// sql-预编译的SQL语句
|
||||
// parameters-预编译的SQL语句参数
|
||||
func RawDB(source string, sql string, parameters []any) ([]map[string]any, error) {
|
||||
var rows []map[string]any
|
||||
// 数据源
|
||||
db := DB(source)
|
||||
if db == nil {
|
||||
return rows, fmt.Errorf("not database source")
|
||||
}
|
||||
// 使用正则表达式替换连续的空白字符为单个空格
|
||||
fmtSql := regexp.MustCompile(`\s+`).ReplaceAllString(sql, " ")
|
||||
// 查询结果
|
||||
res := db.Raw(fmtSql, parameters...).Scan(&rows)
|
||||
if res.Error != nil {
|
||||
return nil, res.Error
|
||||
}
|
||||
return rows, nil
|
||||
}
|
||||
|
||||
// ExecDB 原生语句执行
|
||||
//
|
||||
// source-数据源
|
||||
// sql-预编译的SQL语句
|
||||
// parameters-预编译的SQL语句参数
|
||||
func ExecDB(source string, sql string, parameters []any) (int64, error) {
|
||||
// 数据源
|
||||
db := DB(source)
|
||||
if db == nil {
|
||||
return 0, fmt.Errorf("not database source")
|
||||
}
|
||||
// 使用正则表达式替换连续的空白字符为单个空格
|
||||
fmtSql := regexp.MustCompile(`\s+`).ReplaceAllString(sql, " ")
|
||||
// 执行结果
|
||||
res := db.Exec(fmtSql, parameters...)
|
||||
if res.Error != nil {
|
||||
return 0, res.Error
|
||||
}
|
||||
return res.RowsAffected, nil
|
||||
}
|
||||
|
||||
// PageNumSize 分页页码记录数
|
||||
//
|
||||
// pageNum-页码
|
||||
// pageSize-记录数
|
||||
func PageNumSize(pageNum, pageSize any) (int, int) {
|
||||
// 记录起始索引
|
||||
num := parse.Number(pageNum)
|
||||
if num < 1 {
|
||||
num = 1
|
||||
}
|
||||
|
||||
// 显示记录数
|
||||
size := parse.Number(pageSize)
|
||||
if size < 0 {
|
||||
size = 10
|
||||
}
|
||||
return int(num - 1), int(size)
|
||||
}
|
||||
104
src/framework/database/db/expand.go
Normal file
104
src/framework/database/db/expand.go
Normal file
@@ -0,0 +1,104 @@
|
||||
package db
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"log"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
|
||||
"gorm.io/gorm"
|
||||
|
||||
"be.ems/src/framework/config"
|
||||
)
|
||||
|
||||
// ImportSQL 导入SQL
|
||||
func ImportSQL() {
|
||||
sqlPath := config.Get("sqlPath").(string)
|
||||
if sqlPath == "" {
|
||||
return
|
||||
}
|
||||
sqlSource := config.Get("sqlSource").(string)
|
||||
if sqlSource == "" {
|
||||
sqlSource = config.Get("database.defaultDataSourceName").(string)
|
||||
}
|
||||
|
||||
// 数据源
|
||||
db := DB(sqlSource)
|
||||
if db == nil {
|
||||
log.Fatalln("not database source")
|
||||
return
|
||||
}
|
||||
|
||||
// 获取路径信息
|
||||
fileInfo, err := os.Stat(sqlPath)
|
||||
if err != nil {
|
||||
log.Fatalln(err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
// 处理目录或文件
|
||||
if fileInfo.IsDir() {
|
||||
// 处理目录
|
||||
files, err := os.ReadDir(sqlPath)
|
||||
if err != nil {
|
||||
log.Fatalln(err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
for _, file := range files {
|
||||
if file.IsDir() {
|
||||
continue
|
||||
}
|
||||
if !strings.HasSuffix(file.Name(), ".sql") {
|
||||
continue
|
||||
}
|
||||
processSQLFile(db, filepath.Join(sqlPath, file.Name()))
|
||||
}
|
||||
} else {
|
||||
// 处理单个文件
|
||||
processSQLFile(db, sqlPath)
|
||||
}
|
||||
|
||||
log.Println("process success")
|
||||
os.Exit(0)
|
||||
}
|
||||
|
||||
// 处理单个SQL文件的通用函数
|
||||
func processSQLFile(db *gorm.DB, filePath string) {
|
||||
file, err := os.Open(filePath)
|
||||
if err != nil {
|
||||
log.Fatalln(err.Error())
|
||||
return
|
||||
}
|
||||
defer file.Close()
|
||||
|
||||
// 逐行读取 SQL 文件
|
||||
scanner := bufio.NewScanner(file)
|
||||
var sqlBuilder strings.Builder
|
||||
for scanner.Scan() {
|
||||
line := strings.TrimSpace(scanner.Text())
|
||||
// 跳过注释和空行
|
||||
if strings.HasPrefix(line, "--") || strings.TrimSpace(line) == "" {
|
||||
continue
|
||||
}
|
||||
// 跳过配置语句
|
||||
if strings.HasPrefix(line, "/*!") {
|
||||
continue
|
||||
}
|
||||
|
||||
sqlBuilder.WriteString(line + "\n")
|
||||
|
||||
// 当遇到分号时,执行 SQL 语句
|
||||
if strings.HasSuffix(line, ";") {
|
||||
// 执行 SQL 语句
|
||||
if err := db.Exec(sqlBuilder.String()).Error; err != nil {
|
||||
log.Fatalln(err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
sqlBuilder.Reset()
|
||||
continue
|
||||
}
|
||||
}
|
||||
}
|
||||
175
src/framework/database/redis/expand.go
Normal file
175
src/framework/database/redis/expand.go
Normal file
@@ -0,0 +1,175 @@
|
||||
package redis
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"be.ems/src/framework/logger"
|
||||
"github.com/redis/go-redis/v9"
|
||||
)
|
||||
|
||||
// 连接Redis实例
|
||||
func ConnectPush(source string, rdb *redis.Client) {
|
||||
if rdb == nil {
|
||||
delete(rdbMap, source)
|
||||
return
|
||||
}
|
||||
rdbMap[source] = rdb
|
||||
}
|
||||
|
||||
// 批量获得缓存数据 [key]result
|
||||
func GetHashBatch(source string, keys []string) (map[string]map[string]string, error) {
|
||||
result := make(map[string]map[string]string, 0)
|
||||
if len(keys) == 0 {
|
||||
return result, fmt.Errorf("not keys")
|
||||
}
|
||||
|
||||
// 数据源
|
||||
rdb := RDB(source)
|
||||
if rdb == nil {
|
||||
return result, fmt.Errorf("redis not client")
|
||||
}
|
||||
|
||||
// 创建一个有限的并发控制信号通道
|
||||
sem := make(chan struct{}, 10)
|
||||
var wg sync.WaitGroup
|
||||
var mt sync.Mutex
|
||||
batchSize := 1000
|
||||
total := len(keys)
|
||||
if total < batchSize {
|
||||
batchSize = total
|
||||
}
|
||||
|
||||
for i := 0; i < total; i += batchSize {
|
||||
wg.Add(1)
|
||||
go func(start int) {
|
||||
ctx := context.Background()
|
||||
// 并发控制,限制同时执行的 Goroutine 数量
|
||||
sem <- struct{}{}
|
||||
defer func() {
|
||||
<-sem
|
||||
ctx.Done()
|
||||
wg.Done()
|
||||
}()
|
||||
|
||||
// 检查索引是否越界
|
||||
end := start + batchSize
|
||||
if end > total {
|
||||
end = total
|
||||
}
|
||||
pipe := rdb.Pipeline()
|
||||
for _, key := range keys[start:end] {
|
||||
pipe.HGetAll(ctx, key)
|
||||
}
|
||||
|
||||
cmds, err := pipe.Exec(ctx)
|
||||
if err != nil {
|
||||
logger.Errorf("Failed to get hash batch exec err: %v", err)
|
||||
return
|
||||
}
|
||||
|
||||
// 将结果添加到 result map 并发访问
|
||||
mt.Lock()
|
||||
defer mt.Unlock()
|
||||
|
||||
// 处理命令结果
|
||||
for _, cmd := range cmds {
|
||||
if cmd.Err() != nil {
|
||||
logger.Errorf("Failed to get hash batch cmds err: %v", cmd.Err())
|
||||
continue
|
||||
}
|
||||
// 将结果转换为 *redis.StringStringMapCmd 类型
|
||||
rcmd, ok := cmd.(*redis.MapStringStringCmd)
|
||||
if !ok {
|
||||
logger.Errorf("Failed to get hash batch type err: %v", cmd.Err())
|
||||
continue
|
||||
}
|
||||
|
||||
key := "-"
|
||||
args := rcmd.Args()
|
||||
if len(args) > 0 {
|
||||
key = fmt.Sprint(args[1])
|
||||
}
|
||||
|
||||
result[key] = rcmd.Val()
|
||||
}
|
||||
}(i)
|
||||
}
|
||||
|
||||
wg.Wait()
|
||||
return result, nil
|
||||
}
|
||||
|
||||
// GetHash 获得缓存数据
|
||||
func GetHash(source, key, field string) (string, error) {
|
||||
// 数据源
|
||||
rdb := RDB(source)
|
||||
if rdb == nil {
|
||||
return "", fmt.Errorf("redis not client")
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
v, err := rdb.HGet(ctx, key, field).Result()
|
||||
if errors.Is(err, redis.Nil) {
|
||||
return "", fmt.Errorf("no key field")
|
||||
}
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return v, nil
|
||||
}
|
||||
|
||||
// SetHash 设置缓存数据
|
||||
func SetHash(source, key string, value map[string]any) error {
|
||||
// 数据源
|
||||
rdb := RDB(source)
|
||||
if rdb == nil {
|
||||
return fmt.Errorf("redis not client")
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
err := rdb.HSet(ctx, key, value).Err()
|
||||
if err != nil {
|
||||
logger.Errorf("redis HSet err %v", err)
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// IncrBy 累加统计数据
|
||||
func IncrBy(source, key, field string, value int64) error {
|
||||
// 数据源
|
||||
rdb := RDB(source)
|
||||
if rdb == nil {
|
||||
return fmt.Errorf("redis not client")
|
||||
}
|
||||
|
||||
// 使用HINCRBY命令进行累加统计
|
||||
ctx := context.Background()
|
||||
err := rdb.HIncrBy(ctx, key, field, value).Err()
|
||||
if err != nil {
|
||||
logger.Errorf("redis HIncrBy err %v", err)
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Expire 过期时间设置
|
||||
func Expire(source, key string, expiration time.Duration) error {
|
||||
// 数据源
|
||||
rdb := RDB(source)
|
||||
if rdb == nil {
|
||||
return fmt.Errorf("redis not client")
|
||||
}
|
||||
// 过期时间设置
|
||||
ctx := context.Background()
|
||||
err := rdb.Expire(ctx, key, expiration).Err()
|
||||
if err != nil {
|
||||
logger.Errorf("redis HIncrBy err %v", err)
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
346
src/framework/database/redis/redis.go
Normal file
346
src/framework/database/redis/redis.go
Normal file
@@ -0,0 +1,346 @@
|
||||
package redis
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/redis/go-redis/v9"
|
||||
|
||||
"be.ems/src/framework/config"
|
||||
"be.ems/src/framework/logger"
|
||||
)
|
||||
|
||||
// Redis连接实例
|
||||
var rdbMap = make(map[string]*redis.Client)
|
||||
|
||||
// Connect 连接Redis实例
|
||||
func Connect() {
|
||||
ctx := context.Background()
|
||||
// 读取数据源配置
|
||||
datasource := config.Get("redis.dataSource").(map[string]any)
|
||||
for k, v := range datasource {
|
||||
client := v.(map[string]any)
|
||||
// 创建连接
|
||||
address := fmt.Sprintf("%s:%d", client["host"], client["port"])
|
||||
rdb := redis.NewClient(&redis.Options{
|
||||
Addr: address,
|
||||
Password: client["password"].(string),
|
||||
DB: client["db"].(int),
|
||||
})
|
||||
// 测试数据库连接
|
||||
pong, err := rdb.Ping(ctx).Result()
|
||||
if err != nil {
|
||||
logger.Fatalf("failed error redis connect: %s is %v", k, err)
|
||||
}
|
||||
logger.Infof("redis %s %d %s connection is successful.", k, client["db"].(int), pong)
|
||||
rdbMap[k] = rdb
|
||||
}
|
||||
}
|
||||
|
||||
// Close 关闭Redis实例
|
||||
func Close() {
|
||||
for _, rdb := range rdbMap {
|
||||
if err := rdb.Close(); err != nil {
|
||||
logger.Errorf("redis db close: %s", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// RDB 获取实例
|
||||
func RDB(source string) *redis.Client {
|
||||
// 不指定时获取默认实例
|
||||
if source == "" {
|
||||
source = config.Get("redis.defaultDataSourceName").(string)
|
||||
}
|
||||
return rdbMap[source]
|
||||
}
|
||||
|
||||
// Info 获取redis服务信息
|
||||
func Info(source string) map[string]map[string]string {
|
||||
infoObj := make(map[string]map[string]string)
|
||||
// 数据源
|
||||
rdb := RDB(source)
|
||||
if rdb == nil {
|
||||
return infoObj
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
info, err := rdb.Info(ctx).Result()
|
||||
if err != nil {
|
||||
return infoObj
|
||||
}
|
||||
|
||||
lines := strings.Split(info, "\r\n")
|
||||
label := ""
|
||||
for _, line := range lines {
|
||||
if strings.Contains(line, "#") {
|
||||
label = strings.Fields(line)[len(strings.Fields(line))-1]
|
||||
label = strings.ToLower(label)
|
||||
infoObj[label] = make(map[string]string)
|
||||
continue
|
||||
}
|
||||
kvArr := strings.Split(line, ":")
|
||||
if len(kvArr) >= 2 {
|
||||
key := strings.TrimSpace(kvArr[0])
|
||||
value := strings.TrimSpace(kvArr[len(kvArr)-1])
|
||||
infoObj[label][key] = value
|
||||
}
|
||||
}
|
||||
return infoObj
|
||||
}
|
||||
|
||||
// KeySize 获取redis当前连接可用键Key总数信息
|
||||
func KeySize(source string) int64 {
|
||||
// 数据源
|
||||
rdb := RDB(source)
|
||||
if rdb == nil {
|
||||
return 0
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
size, err := rdb.DBSize(ctx).Result()
|
||||
if err != nil {
|
||||
return 0
|
||||
}
|
||||
return size
|
||||
}
|
||||
|
||||
// CommandStats 获取redis命令状态信息
|
||||
func CommandStats(source string) []map[string]string {
|
||||
statsObjArr := make([]map[string]string, 0)
|
||||
// 数据源
|
||||
rdb := RDB(source)
|
||||
if rdb == nil {
|
||||
return statsObjArr
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
commandstats, err := rdb.Info(ctx, "commandstats").Result()
|
||||
if err != nil {
|
||||
return statsObjArr
|
||||
}
|
||||
|
||||
lines := strings.Split(commandstats, "\r\n")
|
||||
for _, line := range lines {
|
||||
if !strings.HasPrefix(line, "cmdstat_") {
|
||||
continue
|
||||
}
|
||||
kvArr := strings.Split(line, ":")
|
||||
key := kvArr[0]
|
||||
valueStr := kvArr[len(kvArr)-1]
|
||||
statsObj := make(map[string]string)
|
||||
statsObj["name"] = key[8:]
|
||||
statsObj["value"] = valueStr[6:strings.Index(valueStr, ",usec=")]
|
||||
statsObjArr = append(statsObjArr, statsObj)
|
||||
}
|
||||
return statsObjArr
|
||||
}
|
||||
|
||||
// GetExpire 获取键的剩余有效时间(秒)
|
||||
func GetExpire(source string, key string) (int64, error) {
|
||||
// 数据源
|
||||
rdb := RDB(source)
|
||||
if rdb == nil {
|
||||
return 0, fmt.Errorf("redis not client")
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
ttl, err := rdb.TTL(ctx, key).Result()
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
return int64(ttl.Seconds()), nil
|
||||
}
|
||||
|
||||
// GetKeys 获得缓存数据的key列表
|
||||
func GetKeys(source string, pattern string) ([]string, error) {
|
||||
keys := make([]string, 0)
|
||||
// 数据源
|
||||
rdb := RDB(source)
|
||||
if rdb == nil {
|
||||
return keys, fmt.Errorf("redis not client")
|
||||
}
|
||||
|
||||
// 游标
|
||||
var cursor uint64 = 0
|
||||
var count int64 = 100
|
||||
ctx := context.Background()
|
||||
// 循环遍历获取匹配的键
|
||||
for {
|
||||
// 使用 SCAN 命令获取匹配的键
|
||||
batchKeys, nextCursor, err := rdb.Scan(ctx, cursor, pattern, count).Result()
|
||||
if err != nil {
|
||||
logger.Errorf("failed to scan keys: %v", err)
|
||||
return keys, err
|
||||
}
|
||||
cursor = nextCursor
|
||||
keys = append(keys, batchKeys...)
|
||||
// 当 cursor 为 0,表示遍历完成
|
||||
if cursor == 0 {
|
||||
break
|
||||
}
|
||||
}
|
||||
return keys, nil
|
||||
}
|
||||
|
||||
// GetBatch 批量获得缓存数据
|
||||
func GetBatch(source string, keys []string) ([]any, error) {
|
||||
result := make([]any, 0)
|
||||
if len(keys) == 0 {
|
||||
return result, fmt.Errorf("not keys")
|
||||
}
|
||||
|
||||
// 数据源
|
||||
rdb := RDB(source)
|
||||
if rdb == nil {
|
||||
return result, fmt.Errorf("redis not client")
|
||||
}
|
||||
|
||||
// 获取缓存数据
|
||||
v, err := rdb.MGet(context.Background(), keys...).Result()
|
||||
if err != nil || errors.Is(err, redis.Nil) {
|
||||
logger.Errorf("failed to get batch data: %v", err)
|
||||
return result, err
|
||||
}
|
||||
return v, nil
|
||||
}
|
||||
|
||||
// Get 获得缓存数据
|
||||
func Get(source, key string) (string, error) {
|
||||
// 数据源
|
||||
rdb := RDB(source)
|
||||
if rdb == nil {
|
||||
return "", fmt.Errorf("redis not client")
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
v, err := rdb.Get(ctx, key).Result()
|
||||
if errors.Is(err, redis.Nil) {
|
||||
return "", fmt.Errorf("no keys")
|
||||
}
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return v, nil
|
||||
}
|
||||
|
||||
// Has 判断是否存在
|
||||
func Has(source string, keys ...string) (int64, error) {
|
||||
// 数据源
|
||||
rdb := RDB(source)
|
||||
if rdb == nil {
|
||||
return 0, fmt.Errorf("redis not client")
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
exists, err := rdb.Exists(ctx, keys...).Result()
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
return exists, nil
|
||||
}
|
||||
|
||||
// Set 设置缓存数据
|
||||
func Set(source, key string, value any) error {
|
||||
// 数据源
|
||||
rdb := RDB(source)
|
||||
if rdb == nil {
|
||||
return fmt.Errorf("redis not client")
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
err := rdb.Set(ctx, key, value, 0).Err()
|
||||
if err != nil {
|
||||
logger.Errorf("redis Set err %v", err)
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// SetByExpire 设置缓存数据与过期时间
|
||||
func SetByExpire(source, key string, value any, expiration time.Duration) error {
|
||||
// 数据源
|
||||
rdb := RDB(source)
|
||||
if rdb == nil {
|
||||
return fmt.Errorf("redis not client")
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
err := rdb.Set(ctx, key, value, expiration).Err()
|
||||
if err != nil {
|
||||
logger.Errorf("redis SetByExpire err %v", err)
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Del 删除单个
|
||||
func Del(source string, key string) error {
|
||||
// 数据源
|
||||
rdb := RDB(source)
|
||||
if rdb == nil {
|
||||
return fmt.Errorf("redis not client")
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
if err := rdb.Del(ctx, key).Err(); err != nil {
|
||||
logger.Errorf("redis Del err %v", err)
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// DelKeys 删除多个
|
||||
func DelKeys(source string, keys []string) error {
|
||||
if len(keys) == 0 {
|
||||
return fmt.Errorf("no keys")
|
||||
}
|
||||
|
||||
// 数据源
|
||||
rdb := RDB(source)
|
||||
if rdb == nil {
|
||||
return fmt.Errorf("redis not client")
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
if err := rdb.Del(ctx, keys...).Err(); err != nil {
|
||||
logger.Errorf("redis DelKeys err %v", err)
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// RateLimit 限流查询并记录
|
||||
func RateLimit(source, limitKey string, time, count int64) (int64, error) {
|
||||
// 数据源
|
||||
rdb := RDB(source)
|
||||
if rdb == nil {
|
||||
return 0, fmt.Errorf("redis not client")
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
result, err := rateLimitCommand.Run(ctx, rdb, []string{limitKey}, time, count).Result()
|
||||
if err != nil {
|
||||
logger.Errorf("redis lua script err %v", err)
|
||||
return 0, err
|
||||
}
|
||||
return result.(int64), err
|
||||
}
|
||||
|
||||
// 声明定义限流脚本命令
|
||||
var rateLimitCommand = redis.NewScript(`
|
||||
local key = KEYS[1]
|
||||
local time = tonumber(ARGV[1])
|
||||
local count = tonumber(ARGV[2])
|
||||
local current = redis.call('get', key);
|
||||
if current and tonumber(current) >= count then
|
||||
return tonumber(current);
|
||||
end
|
||||
current = redis.call('incr', key)
|
||||
if tonumber(current) == 1 then
|
||||
redis.call('expire', key, time)
|
||||
end
|
||||
return tonumber(current);`)
|
||||
@@ -1,127 +1,22 @@
|
||||
package datasource
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
"regexp"
|
||||
"time"
|
||||
|
||||
"be.ems/src/framework/config"
|
||||
"be.ems/src/framework/logger"
|
||||
"be.ems/src/framework/database/db"
|
||||
"be.ems/src/framework/utils/parse"
|
||||
|
||||
"gorm.io/driver/mysql"
|
||||
"gorm.io/gorm"
|
||||
gormLog "gorm.io/gorm/logger"
|
||||
)
|
||||
|
||||
// 数据库连接实例
|
||||
var dbMap = make(map[string]*gorm.DB)
|
||||
|
||||
type dialectInfo struct {
|
||||
dialector gorm.Dialector
|
||||
logging bool
|
||||
}
|
||||
|
||||
// 载入数据库连接
|
||||
func loadDialect() map[string]dialectInfo {
|
||||
dialects := make(map[string]dialectInfo, 0)
|
||||
|
||||
// 读取数据源配置
|
||||
datasource := config.Get("gorm.datasource").(map[string]any)
|
||||
for key, value := range datasource {
|
||||
item := value.(map[string]any)
|
||||
// 数据库类型对应的数据库连接
|
||||
switch item["type"] {
|
||||
case "mysql":
|
||||
dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local",
|
||||
item["username"],
|
||||
item["password"],
|
||||
item["host"],
|
||||
item["port"],
|
||||
item["database"],
|
||||
)
|
||||
dialects[key] = dialectInfo{
|
||||
dialector: mysql.Open(dsn),
|
||||
logging: item["logging"].(bool),
|
||||
}
|
||||
default:
|
||||
logger.Fatalf("%s: %v\n Not Load DB Config Type", key, item)
|
||||
}
|
||||
}
|
||||
|
||||
return dialects
|
||||
}
|
||||
|
||||
// 载入连接日志配置
|
||||
func loadLogger() gormLog.Interface {
|
||||
newLogger := gormLog.New(
|
||||
log.New(os.Stdout, "[GORM] ", log.LstdFlags), // 将日志输出到控制台
|
||||
gormLog.Config{
|
||||
SlowThreshold: time.Second, // Slow SQL 阈值
|
||||
LogLevel: gormLog.Info, // 日志级别 Silent不输出任何日志
|
||||
ParameterizedQueries: false, // 参数化查询SQL 用实际值带入?的执行语句
|
||||
Colorful: false, // 彩色日志输出
|
||||
},
|
||||
)
|
||||
return newLogger
|
||||
}
|
||||
|
||||
// 连接数据库实例
|
||||
func Connect() {
|
||||
// 遍历进行连接数据库实例
|
||||
for key, info := range loadDialect() {
|
||||
opts := &gorm.Config{}
|
||||
// 是否需要日志输出
|
||||
if info.logging {
|
||||
opts.Logger = loadLogger()
|
||||
}
|
||||
// 创建连接
|
||||
db, err := gorm.Open(info.dialector, opts)
|
||||
if err != nil {
|
||||
logger.Fatalf("failed error db connect: %s", err)
|
||||
}
|
||||
// 获取底层 SQL 数据库连接
|
||||
sqlDB, err := db.DB()
|
||||
if err != nil {
|
||||
logger.Fatalf("failed error underlying SQL database: %v", err)
|
||||
}
|
||||
// 测试数据库连接
|
||||
err = sqlDB.Ping()
|
||||
if err != nil {
|
||||
logger.Fatalf("failed error ping database: %v", err)
|
||||
}
|
||||
logger.Infof("database %s connection is successful.", key)
|
||||
dbMap[key] = db
|
||||
}
|
||||
}
|
||||
|
||||
// 关闭数据库实例
|
||||
func Close() {
|
||||
for _, db := range dbMap {
|
||||
sqlDB, err := db.DB()
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
if err := sqlDB.Close(); err != nil {
|
||||
logger.Errorf("fatal error db close: %s", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 获取默认数据源
|
||||
func DefaultDB() *gorm.DB {
|
||||
source := config.Get("gorm.defaultDataSourceName").(string)
|
||||
return dbMap[source]
|
||||
return db.DB("")
|
||||
}
|
||||
|
||||
// 获取数据源
|
||||
func DB(source string) *gorm.DB {
|
||||
if source == "" {
|
||||
source = config.Get("gorm.defaultDataSourceName").(string)
|
||||
}
|
||||
return dbMap[source]
|
||||
return db.DB(source)
|
||||
}
|
||||
|
||||
// RawDB 原生查询语句
|
||||
|
||||
@@ -6,8 +6,8 @@ import (
|
||||
"time"
|
||||
|
||||
"be.ems/src/framework/constants/cachekey"
|
||||
"be.ems/src/framework/database/redis"
|
||||
"be.ems/src/framework/i18n"
|
||||
"be.ems/src/framework/redis"
|
||||
"be.ems/src/framework/utils/ctx"
|
||||
"be.ems/src/framework/utils/ip2region"
|
||||
"be.ems/src/framework/vo/result"
|
||||
|
||||
@@ -6,8 +6,8 @@ import (
|
||||
"time"
|
||||
|
||||
"be.ems/src/framework/constants/cachekey"
|
||||
"be.ems/src/framework/database/redis"
|
||||
"be.ems/src/framework/logger"
|
||||
"be.ems/src/framework/redis"
|
||||
"be.ems/src/framework/utils/ctx"
|
||||
"be.ems/src/framework/utils/ip2region"
|
||||
"be.ems/src/framework/vo/result"
|
||||
|
||||
@@ -1,442 +0,0 @@
|
||||
package redis
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"be.ems/src/framework/config"
|
||||
"be.ems/src/framework/logger"
|
||||
|
||||
"github.com/redis/go-redis/v9"
|
||||
)
|
||||
|
||||
// Redis连接实例
|
||||
var rdbMap = make(map[string]*redis.Client)
|
||||
|
||||
// 声明定义限流脚本命令
|
||||
var rateLimitCommand = redis.NewScript(`
|
||||
local key = KEYS[1]
|
||||
local time = tonumber(ARGV[1])
|
||||
local count = tonumber(ARGV[2])
|
||||
local current = redis.call('get', key);
|
||||
if current and tonumber(current) >= count then
|
||||
return tonumber(current);
|
||||
end
|
||||
current = redis.call('incr', key)
|
||||
if tonumber(current) == 1 then
|
||||
redis.call('expire', key, time)
|
||||
end
|
||||
return tonumber(current);`)
|
||||
|
||||
// 连接Redis实例
|
||||
func ConnectPush(source string, rdb *redis.Client) {
|
||||
if rdb == nil {
|
||||
delete(rdbMap, source)
|
||||
return
|
||||
}
|
||||
rdbMap[source] = rdb
|
||||
}
|
||||
|
||||
// 连接Redis实例
|
||||
func Connect() {
|
||||
ctx := context.Background()
|
||||
// 读取数据源配置
|
||||
datasource := config.Get("redis.dataSource").(map[string]any)
|
||||
for k, v := range datasource {
|
||||
client := v.(map[string]any)
|
||||
// 创建连接
|
||||
address := fmt.Sprintf("%s:%d", client["host"], client["port"])
|
||||
rdb := redis.NewClient(&redis.Options{
|
||||
Addr: address,
|
||||
Password: client["password"].(string),
|
||||
DB: client["db"].(int),
|
||||
})
|
||||
// 测试数据库连接
|
||||
pong, err := rdb.Ping(ctx).Result()
|
||||
if err != nil {
|
||||
logger.Fatalf("Ping redis %s is %v", k, err)
|
||||
}
|
||||
logger.Infof("redis %s %s %d connection is successful.", k, pong, client["db"].(int))
|
||||
rdbMap[k] = rdb
|
||||
}
|
||||
}
|
||||
|
||||
// 关闭Redis实例
|
||||
func Close() {
|
||||
for _, rdb := range rdbMap {
|
||||
if err := rdb.Close(); err != nil {
|
||||
logger.Errorf("fatal error db close: %s", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 获取默认实例
|
||||
func DefaultRDB() *redis.Client {
|
||||
source := config.Get("redis.defaultDataSourceName").(string)
|
||||
return rdbMap[source]
|
||||
}
|
||||
|
||||
// 获取实例
|
||||
func RDB(source string) *redis.Client {
|
||||
return rdbMap[source]
|
||||
}
|
||||
|
||||
// Info 获取redis服务信息
|
||||
func Info(source string) map[string]map[string]string {
|
||||
// 数据源
|
||||
rdb := DefaultRDB()
|
||||
if source != "" {
|
||||
rdb = RDB(source)
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
info, err := rdb.Info(ctx).Result()
|
||||
if err != nil {
|
||||
return map[string]map[string]string{}
|
||||
}
|
||||
infoObj := make(map[string]map[string]string)
|
||||
lines := strings.Split(info, "\r\n")
|
||||
label := ""
|
||||
for _, line := range lines {
|
||||
if strings.Contains(line, "#") {
|
||||
label = strings.Fields(line)[len(strings.Fields(line))-1]
|
||||
label = strings.ToLower(label)
|
||||
infoObj[label] = make(map[string]string)
|
||||
continue
|
||||
}
|
||||
kvArr := strings.Split(line, ":")
|
||||
if len(kvArr) >= 2 {
|
||||
key := strings.TrimSpace(kvArr[0])
|
||||
value := strings.TrimSpace(kvArr[len(kvArr)-1])
|
||||
infoObj[label][key] = value
|
||||
}
|
||||
}
|
||||
return infoObj
|
||||
}
|
||||
|
||||
// KeySize 获取redis当前连接可用键Key总数信息
|
||||
func KeySize(source string) int64 {
|
||||
// 数据源
|
||||
rdb := DefaultRDB()
|
||||
if source != "" {
|
||||
rdb = RDB(source)
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
size, err := rdb.DBSize(ctx).Result()
|
||||
if err != nil {
|
||||
return 0
|
||||
}
|
||||
return size
|
||||
}
|
||||
|
||||
// CommandStats 获取redis命令状态信息
|
||||
func CommandStats(source string) []map[string]string {
|
||||
// 数据源
|
||||
rdb := DefaultRDB()
|
||||
if source != "" {
|
||||
rdb = RDB(source)
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
commandstats, err := rdb.Info(ctx, "commandstats").Result()
|
||||
if err != nil {
|
||||
return []map[string]string{}
|
||||
}
|
||||
statsObjArr := make([]map[string]string, 0)
|
||||
lines := strings.Split(commandstats, "\r\n")
|
||||
for _, line := range lines {
|
||||
if !strings.HasPrefix(line, "cmdstat_") {
|
||||
continue
|
||||
}
|
||||
kvArr := strings.Split(line, ":")
|
||||
key := kvArr[0]
|
||||
valueStr := kvArr[len(kvArr)-1]
|
||||
statsObj := make(map[string]string)
|
||||
statsObj["name"] = key[8:]
|
||||
statsObj["value"] = valueStr[6:strings.Index(valueStr, ",usec=")]
|
||||
statsObjArr = append(statsObjArr, statsObj)
|
||||
}
|
||||
return statsObjArr
|
||||
}
|
||||
|
||||
// 获取键的剩余有效时间(秒)
|
||||
func GetExpire(source string, key string) (float64, error) {
|
||||
// 数据源
|
||||
rdb := DefaultRDB()
|
||||
if source != "" {
|
||||
rdb = RDB(source)
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
ttl, err := rdb.TTL(ctx, key).Result()
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
return ttl.Seconds(), nil
|
||||
}
|
||||
|
||||
// 获得缓存数据的key列表
|
||||
func GetKeys(source string, match string) ([]string, error) {
|
||||
// 数据源
|
||||
rdb := DefaultRDB()
|
||||
if source != "" {
|
||||
rdb = RDB(source)
|
||||
}
|
||||
|
||||
keys := make([]string, 0)
|
||||
ctx := context.Background()
|
||||
iter := rdb.Scan(ctx, 0, match, 1000).Iterator()
|
||||
if err := iter.Err(); err != nil {
|
||||
logger.Errorf("Failed to scan keys: %v", err)
|
||||
return keys, err
|
||||
}
|
||||
for iter.Next(ctx) {
|
||||
keys = append(keys, iter.Val())
|
||||
}
|
||||
return keys, nil
|
||||
}
|
||||
|
||||
// 批量获得缓存数据
|
||||
func GetBatch(source string, keys []string) ([]any, error) {
|
||||
if len(keys) == 0 {
|
||||
return []any{}, fmt.Errorf("not keys")
|
||||
}
|
||||
|
||||
// 数据源
|
||||
rdb := DefaultRDB()
|
||||
if source != "" {
|
||||
rdb = RDB(source)
|
||||
}
|
||||
|
||||
// 获取缓存数据
|
||||
result, err := rdb.MGet(context.Background(), keys...).Result()
|
||||
if err != nil {
|
||||
logger.Errorf("Failed to get batch data: %v", err)
|
||||
return []any{}, err
|
||||
}
|
||||
return result, nil
|
||||
}
|
||||
|
||||
// 获得缓存数据
|
||||
func Get(source, key string) (string, error) {
|
||||
// 数据源
|
||||
rdb := DefaultRDB()
|
||||
if source != "" {
|
||||
rdb = RDB(source)
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
value, err := rdb.Get(ctx, key).Result()
|
||||
if err == redis.Nil || err != nil {
|
||||
return "", err
|
||||
}
|
||||
return value, nil
|
||||
}
|
||||
|
||||
// 获得缓存数据Hash
|
||||
func GetHash(source, key string) (map[string]string, error) {
|
||||
// 数据源
|
||||
rdb := DefaultRDB()
|
||||
if source != "" {
|
||||
rdb = RDB(source)
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
value, err := rdb.HGetAll(ctx, key).Result()
|
||||
if err == redis.Nil || err != nil {
|
||||
return map[string]string{}, err
|
||||
}
|
||||
return value, nil
|
||||
}
|
||||
|
||||
// 批量获得缓存数据 [key]result
|
||||
func GetHashBatch(source string, keys []string) (map[string]map[string]string, error) {
|
||||
result := make(map[string]map[string]string, 0)
|
||||
if len(keys) == 0 {
|
||||
return result, fmt.Errorf("not keys")
|
||||
}
|
||||
|
||||
// 数据源
|
||||
rdb := DefaultRDB()
|
||||
if source != "" {
|
||||
rdb = RDB(source)
|
||||
}
|
||||
|
||||
// 创建一个有限的并发控制信号通道
|
||||
sem := make(chan struct{}, 10)
|
||||
var wg sync.WaitGroup
|
||||
var mt sync.Mutex
|
||||
batchSize := 1000
|
||||
total := len(keys)
|
||||
if total < batchSize {
|
||||
batchSize = total
|
||||
}
|
||||
|
||||
for i := 0; i < total; i += batchSize {
|
||||
wg.Add(1)
|
||||
go func(start int) {
|
||||
ctx := context.Background()
|
||||
// 并发控制,限制同时执行的 Goroutine 数量
|
||||
sem <- struct{}{}
|
||||
defer func() {
|
||||
<-sem
|
||||
ctx.Done()
|
||||
wg.Done()
|
||||
}()
|
||||
|
||||
// 检查索引是否越界
|
||||
end := start + batchSize
|
||||
if end > total {
|
||||
end = total
|
||||
}
|
||||
pipe := rdb.Pipeline()
|
||||
for _, key := range keys[start:end] {
|
||||
pipe.HGetAll(ctx, key)
|
||||
}
|
||||
|
||||
cmds, err := pipe.Exec(ctx)
|
||||
if err != nil {
|
||||
logger.Errorf("Failed to get hash batch exec err: %v", err)
|
||||
return
|
||||
}
|
||||
|
||||
// 将结果添加到 result map 并发访问
|
||||
mt.Lock()
|
||||
defer mt.Unlock()
|
||||
|
||||
// 处理命令结果
|
||||
for _, cmd := range cmds {
|
||||
if cmd.Err() != nil {
|
||||
logger.Errorf("Failed to get hash batch cmds err: %v", cmd.Err())
|
||||
continue
|
||||
}
|
||||
// 将结果转换为 *redis.StringStringMapCmd 类型
|
||||
rcmd, ok := cmd.(*redis.MapStringStringCmd)
|
||||
if !ok {
|
||||
logger.Errorf("Failed to get hash batch type err: %v", cmd.Err())
|
||||
continue
|
||||
}
|
||||
|
||||
key := "-"
|
||||
args := rcmd.Args()
|
||||
if len(args) > 0 {
|
||||
key = fmt.Sprint(args[1])
|
||||
}
|
||||
|
||||
result[key] = rcmd.Val()
|
||||
}
|
||||
}(i)
|
||||
}
|
||||
|
||||
wg.Wait()
|
||||
return result, nil
|
||||
}
|
||||
|
||||
// 判断是否存在
|
||||
func Has(source string, keys ...string) (bool, error) {
|
||||
// 数据源
|
||||
rdb := DefaultRDB()
|
||||
if source != "" {
|
||||
rdb = RDB(source)
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
exists, err := rdb.Exists(ctx, keys...).Result()
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
return exists >= 1, nil
|
||||
}
|
||||
|
||||
// 设置缓存数据
|
||||
func Set(source, key string, value any) (bool, error) {
|
||||
// 数据源
|
||||
rdb := DefaultRDB()
|
||||
if source != "" {
|
||||
rdb = RDB(source)
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
err := rdb.Set(ctx, key, value, 0).Err()
|
||||
if err != nil {
|
||||
logger.Errorf("redis Set err %v", err)
|
||||
return false, err
|
||||
}
|
||||
return true, nil
|
||||
}
|
||||
|
||||
// 设置缓存数据与过期时间
|
||||
func SetByExpire(source, key string, value any, expiration time.Duration) (bool, error) {
|
||||
// 数据源
|
||||
rdb := DefaultRDB()
|
||||
if source != "" {
|
||||
rdb = RDB(source)
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
err := rdb.Set(ctx, key, value, expiration).Err()
|
||||
if err != nil {
|
||||
logger.Errorf("redis SetByExpire err %v", err)
|
||||
return false, err
|
||||
}
|
||||
return true, nil
|
||||
}
|
||||
|
||||
// 删除单个
|
||||
func Del(source string, key string) (bool, error) {
|
||||
// 数据源
|
||||
rdb := DefaultRDB()
|
||||
if source != "" {
|
||||
rdb = RDB(source)
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
err := rdb.Del(ctx, key).Err()
|
||||
if err != nil {
|
||||
logger.Errorf("redis Del err %v", err)
|
||||
return false, err
|
||||
}
|
||||
return true, nil
|
||||
}
|
||||
|
||||
// 删除多个
|
||||
func DelKeys(source string, keys []string) (bool, error) {
|
||||
if len(keys) == 0 {
|
||||
return false, fmt.Errorf("no keys")
|
||||
}
|
||||
|
||||
// 数据源
|
||||
rdb := DefaultRDB()
|
||||
if source != "" {
|
||||
rdb = RDB(source)
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
err := rdb.Del(ctx, keys...).Err()
|
||||
if err != nil {
|
||||
logger.Errorf("redis DelKeys err %v", err)
|
||||
return false, err
|
||||
}
|
||||
return true, nil
|
||||
}
|
||||
|
||||
// 限流查询并记录
|
||||
func RateLimit(source, limitKey string, time, count int64) (int64, error) {
|
||||
// 数据源
|
||||
rdb := DefaultRDB()
|
||||
if source != "" {
|
||||
rdb = RDB(source)
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
result, err := rateLimitCommand.Run(ctx, rdb, []string{limitKey}, time, count).Result()
|
||||
if err != nil {
|
||||
logger.Errorf("redis RateLimit err %v", err)
|
||||
return 0, err
|
||||
}
|
||||
return result.(int64), err
|
||||
}
|
||||
160
src/framework/reqctx/auth.go
Normal file
160
src/framework/reqctx/auth.go
Normal file
@@ -0,0 +1,160 @@
|
||||
package reqctx
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
|
||||
"be.ems/src/framework/config"
|
||||
"be.ems/src/framework/constants"
|
||||
"be.ems/src/framework/vo"
|
||||
)
|
||||
|
||||
// LoginUser 登录用户信息
|
||||
func LoginUser(c *gin.Context) (vo.LoginUser, error) {
|
||||
value, exists := c.Get(constants.CTX_LOGIN_USER)
|
||||
if exists && value != nil {
|
||||
return value.(vo.LoginUser), nil
|
||||
}
|
||||
return vo.LoginUser{}, fmt.Errorf("invalid login user information")
|
||||
}
|
||||
|
||||
// LoginUserToUserID 登录用户信息-用户ID
|
||||
func LoginUserToUserID(c *gin.Context) string {
|
||||
info, err := LoginUser(c)
|
||||
if err != nil {
|
||||
return ""
|
||||
}
|
||||
return info.UserID
|
||||
}
|
||||
|
||||
// LoginUserToUserName 登录用户信息-用户名称
|
||||
func LoginUserToUserName(c *gin.Context) string {
|
||||
info, err := LoginUser(c)
|
||||
if err != nil {
|
||||
return ""
|
||||
}
|
||||
return info.User.UserName
|
||||
}
|
||||
|
||||
// LoginUserByContainRoles 登录用户信息-包含角色KEY
|
||||
func LoginUserByContainRoles(c *gin.Context, target string) bool {
|
||||
info, err := LoginUser(c)
|
||||
if err != nil {
|
||||
return false
|
||||
}
|
||||
if config.IsAdmin(info.UserID) {
|
||||
return true
|
||||
}
|
||||
roles := info.User.Roles
|
||||
for _, item := range roles {
|
||||
if item.RoleKey == target {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// LoginUserByContainPerms 登录用户信息-包含权限标识
|
||||
func LoginUserByContainPerms(c *gin.Context, target string) bool {
|
||||
loginUser, err := LoginUser(c)
|
||||
if err != nil {
|
||||
return false
|
||||
}
|
||||
if config.IsAdmin(loginUser.UserID) {
|
||||
return true
|
||||
}
|
||||
perms := loginUser.Permissions
|
||||
for _, str := range perms {
|
||||
if str == target {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// LoginUserToDataScopeSQL 登录用户信息-角色数据范围过滤SQL字符串
|
||||
func LoginUserToDataScopeSQL(c *gin.Context, deptAlias string, userAlias string) string {
|
||||
dataScopeSQL := ""
|
||||
// 登录用户信息
|
||||
info, err := LoginUser(c)
|
||||
if err != nil {
|
||||
return dataScopeSQL
|
||||
}
|
||||
userInfo := info.User
|
||||
|
||||
// 如果是系统管理员,则不过滤数据
|
||||
if config.IsAdmin(userInfo.UserID) {
|
||||
return dataScopeSQL
|
||||
}
|
||||
// 无用户角色
|
||||
if len(userInfo.Roles) <= 0 {
|
||||
return dataScopeSQL
|
||||
}
|
||||
|
||||
// 记录角色权限范围定义添加过, 非自定数据权限不需要重复拼接SQL
|
||||
var scopeKeys []string
|
||||
var conditions []string
|
||||
for _, role := range userInfo.Roles {
|
||||
dataScope := role.DataScope
|
||||
|
||||
if constants.ROLE_SCOPE_ALL == dataScope {
|
||||
break
|
||||
}
|
||||
|
||||
if constants.ROLE_SCOPE_CUSTOM != dataScope {
|
||||
hasKey := false
|
||||
for _, key := range scopeKeys {
|
||||
if key == dataScope {
|
||||
hasKey = true
|
||||
break
|
||||
}
|
||||
}
|
||||
if hasKey {
|
||||
continue
|
||||
}
|
||||
}
|
||||
|
||||
if constants.ROLE_SCOPE_CUSTOM == dataScope {
|
||||
sql := fmt.Sprintf(`%s.dept_id IN
|
||||
( SELECT dept_id FROM sys_role_dept WHERE role_id = %s )
|
||||
AND %s.dept_id NOT IN
|
||||
(
|
||||
SELECT d.parent_id FROM sys_dept d
|
||||
INNER JOIN sys_role_dept rd ON rd.dept_id = d.dept_id
|
||||
AND rd.role_id = %s
|
||||
)`, deptAlias, role.RoleID, deptAlias, role.RoleID)
|
||||
conditions = append(conditions, sql)
|
||||
}
|
||||
|
||||
if constants.ROLE_SCOPE_DEPT == dataScope {
|
||||
sql := fmt.Sprintf("%s.dept_id = %s", deptAlias, userInfo.DeptID)
|
||||
conditions = append(conditions, sql)
|
||||
}
|
||||
|
||||
if constants.ROLE_SCOPE_DEPT_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)
|
||||
}
|
||||
|
||||
if constants.ROLE_SCOPE_SELF == dataScope {
|
||||
if userAlias == "" {
|
||||
sql := fmt.Sprintf("%s.dept_id = %s", deptAlias, userInfo.DeptID)
|
||||
conditions = append(conditions, sql)
|
||||
} else {
|
||||
sql := fmt.Sprintf("%s.user_id = %s", userAlias, userInfo.UserID)
|
||||
conditions = append(conditions, sql)
|
||||
}
|
||||
}
|
||||
|
||||
// 记录角色范围
|
||||
scopeKeys = append(scopeKeys, dataScope)
|
||||
}
|
||||
|
||||
// 构建查询条件语句
|
||||
if len(conditions) > 0 {
|
||||
dataScopeSQL = fmt.Sprintf(" ( %s ) ", strings.Join(conditions, " OR "))
|
||||
}
|
||||
return dataScopeSQL
|
||||
}
|
||||
106
src/framework/reqctx/context.go
Normal file
106
src/framework/reqctx/context.go
Normal file
@@ -0,0 +1,106 @@
|
||||
package reqctx
|
||||
|
||||
import (
|
||||
"strings"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"golang.org/x/text/language"
|
||||
|
||||
"be.ems/src/framework/constants"
|
||||
)
|
||||
|
||||
// QueryMap Query参数转换Map
|
||||
func QueryMap(c *gin.Context) map[string]string {
|
||||
queryValues := c.Request.URL.Query()
|
||||
queryParams := make(map[string]string, len(queryValues))
|
||||
for key, values := range queryValues {
|
||||
queryParams[key] = values[0]
|
||||
}
|
||||
return queryParams
|
||||
}
|
||||
|
||||
// BodyJSONMap JSON参数转换Map
|
||||
func BodyJSONMap(c *gin.Context) map[string]any {
|
||||
params := make(map[string]any, 0)
|
||||
c.ShouldBindBodyWithJSON(¶ms)
|
||||
return params
|
||||
}
|
||||
|
||||
// RequestParamsMap 请求参数转换Map
|
||||
func RequestParamsMap(c *gin.Context) map[string]any {
|
||||
params := make(map[string]any, 0)
|
||||
// json
|
||||
if strings.HasPrefix(c.ContentType(), "application/json") {
|
||||
c.ShouldBindBodyWithJSON(¶ms)
|
||||
}
|
||||
|
||||
// 表单
|
||||
formParams := c.Request.PostForm
|
||||
for key, value := range formParams {
|
||||
if _, ok := params[key]; !ok {
|
||||
params[key] = value[0]
|
||||
}
|
||||
}
|
||||
|
||||
// 查询
|
||||
queryParams := c.Request.URL.Query()
|
||||
for key, value := range queryParams {
|
||||
if _, ok := params[key]; !ok {
|
||||
params[key] = value[0]
|
||||
}
|
||||
}
|
||||
return params
|
||||
}
|
||||
|
||||
// Authorization 解析请求头
|
||||
func Authorization(c *gin.Context) string {
|
||||
// Query请求查询
|
||||
if authQuery, ok := c.GetQuery(constants.ACCESS_TOKEN); ok && authQuery != "" {
|
||||
return authQuery
|
||||
}
|
||||
// Header请求头
|
||||
if authHeader := c.GetHeader(constants.ACCESS_TOKEN); authHeader != "" {
|
||||
return authHeader
|
||||
}
|
||||
|
||||
// Query请求查询
|
||||
if authQuery, ok := c.GetQuery(constants.ACCESS_TOKEN_QUERY); ok && authQuery != "" {
|
||||
return authQuery
|
||||
}
|
||||
// Header请求头
|
||||
authHeader := c.GetHeader(constants.HEADER_KEY)
|
||||
if authHeader == "" {
|
||||
return ""
|
||||
}
|
||||
// 拆分 Authorization 请求头,提取 JWT 令牌部分
|
||||
arr := strings.SplitN(authHeader, constants.HEADER_PREFIX, 2)
|
||||
if len(arr) < 2 {
|
||||
return ""
|
||||
}
|
||||
return arr[1]
|
||||
}
|
||||
|
||||
// AcceptLanguage 解析客户端接收语言 zh:中文 en: 英文
|
||||
func AcceptLanguage(c *gin.Context) string {
|
||||
preferredLanguage := language.English
|
||||
|
||||
// Query请求查询
|
||||
if v, ok := c.GetQuery("language"); ok && v != "" {
|
||||
tags, _, _ := language.ParseAcceptLanguage(v)
|
||||
if len(tags) > 0 {
|
||||
preferredLanguage = tags[0]
|
||||
}
|
||||
}
|
||||
// Header请求头
|
||||
if v := c.GetHeader("Accept-Language"); v != "" {
|
||||
tags, _, _ := language.ParseAcceptLanguage(v)
|
||||
if len(tags) > 0 {
|
||||
preferredLanguage = tags[0]
|
||||
}
|
||||
}
|
||||
|
||||
// 只取前缀
|
||||
lang := preferredLanguage.String()
|
||||
arr := strings.Split(lang, "-")
|
||||
return arr[0]
|
||||
}
|
||||
35
src/framework/reqctx/param.go
Normal file
35
src/framework/reqctx/param.go
Normal file
@@ -0,0 +1,35 @@
|
||||
package reqctx
|
||||
|
||||
import (
|
||||
"github.com/gin-gonic/gin"
|
||||
|
||||
"be.ems/src/framework/utils/ip2region"
|
||||
"be.ems/src/framework/utils/ua"
|
||||
)
|
||||
|
||||
// IPAddrLocation 解析ip地址
|
||||
func IPAddrLocation(c *gin.Context) (string, string) {
|
||||
ip := ip2region.ClientIP(c.ClientIP())
|
||||
location := "-" //ip2region.RealAddressByIp(ip)
|
||||
return ip, location
|
||||
}
|
||||
|
||||
// UaOsBrowser 解析请求用户代理信息
|
||||
func UaOsBrowser(c *gin.Context) (string, string) {
|
||||
userAgent := c.GetHeader("user-agent")
|
||||
uaInfo := ua.Info(userAgent)
|
||||
|
||||
browser := "-"
|
||||
if bName, bVersion := uaInfo.Browser(); bName != "" {
|
||||
browser = bName
|
||||
if bVersion != "" {
|
||||
browser = bName + " " + bVersion
|
||||
}
|
||||
}
|
||||
|
||||
os := "-"
|
||||
if bos := uaInfo.OS(); bos != "" {
|
||||
os = bos
|
||||
}
|
||||
return os, browser
|
||||
}
|
||||
74
src/framework/resp/api.go
Normal file
74
src/framework/resp/api.go
Normal file
@@ -0,0 +1,74 @@
|
||||
package resp
|
||||
|
||||
const (
|
||||
// CODE_ERROR 响应-code错误失败
|
||||
CODE_ERROR = 0
|
||||
// MSG_ERROR 响应-msg错误失败
|
||||
MSG_ERROR = "error"
|
||||
|
||||
// CODE_SUCCESS 响应-msg正常成功
|
||||
CODE_SUCCESS = 1
|
||||
// MSG_SUCCCESS 响应-code正常成功
|
||||
MSG_SUCCCESS = "success"
|
||||
|
||||
// 响应-code加密数据
|
||||
CODE_ENCRYPT = 2
|
||||
// 响应-msg加密数据
|
||||
MSG_ENCRYPT = "encrypt"
|
||||
)
|
||||
|
||||
// Resp 响应结构体
|
||||
type Resp struct {
|
||||
Code int `json:"code"` // 响应状态码
|
||||
Msg string `json:"msg"` // 响应信息
|
||||
Data any `json:"data,omitempty"` // 响应数据
|
||||
}
|
||||
|
||||
// CodeMsg 响应结果
|
||||
func CodeMsg(code int, msg string) Resp {
|
||||
return Resp{Code: code, Msg: msg}
|
||||
}
|
||||
|
||||
// Ok 响应成功结果
|
||||
func Ok(v map[string]any) map[string]any {
|
||||
args := make(map[string]any)
|
||||
args["code"] = CODE_SUCCESS
|
||||
args["msg"] = MSG_SUCCCESS
|
||||
// v合并到args
|
||||
for key, value := range v {
|
||||
args[key] = value
|
||||
}
|
||||
return args
|
||||
}
|
||||
|
||||
// OkMsg 响应成功结果信息
|
||||
func OkMsg(msg string) Resp {
|
||||
return Resp{Code: CODE_SUCCESS, Msg: msg}
|
||||
}
|
||||
|
||||
// OkData 响应成功结果数据
|
||||
func OkData(data any) Resp {
|
||||
return Resp{Code: CODE_SUCCESS, Msg: MSG_SUCCCESS, Data: data}
|
||||
}
|
||||
|
||||
// Err 响应失败结果 map[string]any{}
|
||||
func Err(v map[string]any) map[string]any {
|
||||
args := make(map[string]any)
|
||||
args["code"] = CODE_ERROR
|
||||
args["msg"] = MSG_ERROR
|
||||
// v合并到args
|
||||
for key, value := range v {
|
||||
args[key] = value
|
||||
}
|
||||
return args
|
||||
}
|
||||
|
||||
// ErrMsg 响应失败结果信息
|
||||
func ErrMsg(msg string) Resp {
|
||||
return Resp{Code: CODE_ERROR, Msg: msg}
|
||||
}
|
||||
|
||||
// ErrData 响应失败结果数据
|
||||
func ErrData(data any) Resp {
|
||||
return Resp{Code: CODE_ERROR, Msg: MSG_ERROR, Data: data}
|
||||
}
|
||||
23
src/framework/resp/error.go
Normal file
23
src/framework/resp/error.go
Normal file
@@ -0,0 +1,23 @@
|
||||
package resp
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"github.com/go-playground/validator/v10"
|
||||
)
|
||||
|
||||
// FormatBindError 格式化Gin ShouldBindWith绑定错误
|
||||
//
|
||||
// binding:"required" 验证失败返回: field=id type=string tag=required value=
|
||||
func FormatBindError(err error) string {
|
||||
if errs, ok := err.(validator.ValidationErrors); ok {
|
||||
var errMsgs []string
|
||||
for _, e := range errs {
|
||||
str := fmt.Sprintf("[field=%s, type=%s, tag=%s, param=%s, value=%v]", e.Field(), e.Type().Name(), e.Tag(), e.Param(), e.Value())
|
||||
errMsgs = append(errMsgs, str)
|
||||
}
|
||||
return strings.Join(errMsgs, ", ")
|
||||
}
|
||||
return err.Error()
|
||||
}
|
||||
@@ -91,31 +91,16 @@ func ConvertToCamelCase(str string) string {
|
||||
return strings.Join(words, "")
|
||||
}
|
||||
|
||||
// Bit 比特位为单位
|
||||
// Bit 比特位为单位 1023.00 B --> 1.00 KB
|
||||
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)
|
||||
units := []string{"B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"}
|
||||
for i := 0; i < len(units); i++ {
|
||||
if bit < 1024 || i == len(units)-1 {
|
||||
return fmt.Sprintf("%.2f %s", bit, units[i])
|
||||
}
|
||||
bit /= 1024
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
// CronExpression 解析 Cron 表达式,返回下一次执行的时间戳(毫秒)
|
||||
@@ -146,11 +131,11 @@ func SafeContent(value string) string {
|
||||
}
|
||||
|
||||
// RemoveDuplicates 数组内字符串去重
|
||||
func RemoveDuplicates(ids []string) []string {
|
||||
func RemoveDuplicates(arr []string) []string {
|
||||
uniqueIDs := make(map[string]bool)
|
||||
uniqueIDSlice := make([]string, 0)
|
||||
|
||||
for _, id := range ids {
|
||||
for _, id := range arr {
|
||||
_, ok := uniqueIDs[id]
|
||||
if !ok && id != "" {
|
||||
uniqueIDs[id] = true
|
||||
@@ -161,6 +146,29 @@ func RemoveDuplicates(ids []string) []string {
|
||||
return uniqueIDSlice
|
||||
}
|
||||
|
||||
// RemoveDuplicatesToArray 数组内字符串分隔去重转为字符数组
|
||||
func RemoveDuplicatesToArray(keyStr, sep string) []string {
|
||||
arr := make([]string, 0)
|
||||
if keyStr == "" {
|
||||
return arr
|
||||
}
|
||||
if strings.Contains(keyStr, sep) {
|
||||
// 处理字符转数组后去重
|
||||
strArr := strings.Split(keyStr, sep)
|
||||
uniqueKeys := make(map[string]bool)
|
||||
for _, str := range strArr {
|
||||
_, ok := uniqueKeys[str]
|
||||
if !ok && str != "" {
|
||||
uniqueKeys[str] = true
|
||||
arr = append(arr, str)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
arr = append(arr, keyStr)
|
||||
}
|
||||
return arr
|
||||
}
|
||||
|
||||
// Color 解析颜色 #fafafa
|
||||
func Color(colorStr string) *color.RGBA {
|
||||
// 去除 # 号
|
||||
|
||||
@@ -8,8 +8,8 @@ import (
|
||||
"be.ems/src/framework/config"
|
||||
cachekeyConstants "be.ems/src/framework/constants/cachekey"
|
||||
tokenConstants "be.ems/src/framework/constants/token"
|
||||
redisCahe "be.ems/src/framework/database/redis"
|
||||
"be.ems/src/framework/logger"
|
||||
redisCahe "be.ems/src/framework/redis"
|
||||
"be.ems/src/framework/utils/generate"
|
||||
"be.ems/src/framework/utils/machine"
|
||||
"be.ems/src/framework/vo"
|
||||
@@ -28,7 +28,7 @@ func Remove(tokenStr string) string {
|
||||
uuid := claims[tokenConstants.JWT_UUID].(string)
|
||||
tokenKey := cachekeyConstants.LOGIN_TOKEN_KEY + uuid
|
||||
hasKey, _ := redisCahe.Has("", tokenKey)
|
||||
if hasKey {
|
||||
if hasKey > 0 {
|
||||
redisCahe.Del("", tokenKey)
|
||||
}
|
||||
return claims[tokenConstants.JWT_NAME].(string)
|
||||
@@ -141,7 +141,7 @@ func LoginUser(claims jwt.MapClaims) vo.LoginUser {
|
||||
tokenKey := cachekeyConstants.LOGIN_TOKEN_KEY + uuid
|
||||
hasKey, _ := redisCahe.Has("", tokenKey)
|
||||
var loginUser vo.LoginUser
|
||||
if hasKey {
|
||||
if hasKey > 0 {
|
||||
loginUserStr, _ := redisCahe.Get("", tokenKey)
|
||||
if loginUserStr == "" {
|
||||
return loginUser
|
||||
|
||||
@@ -6,8 +6,8 @@ import (
|
||||
"be.ems/src/framework/config"
|
||||
"be.ems/src/framework/constants/cachekey"
|
||||
"be.ems/src/framework/constants/captcha"
|
||||
"be.ems/src/framework/database/redis"
|
||||
"be.ems/src/framework/logger"
|
||||
"be.ems/src/framework/redis"
|
||||
"be.ems/src/framework/utils/parse"
|
||||
"be.ems/src/framework/vo/result"
|
||||
systemService "be.ems/src/modules/system/service"
|
||||
|
||||
@@ -32,6 +32,6 @@ func (s *IndexController) Handler(c *gin.Context) {
|
||||
name := "OMC"
|
||||
version := libGlobal.Version
|
||||
// str := "欢迎使用%s核心网管理平台,当前版本:%s,请通过前台地址访问。"
|
||||
str := "Welcome to the %s Core Network Management Platform, current version: %s, please access via the frontend address."
|
||||
str := "%s Core Network Management, current version: %s"
|
||||
c.JSON(200, result.OkMsg(fmt.Sprintf(str, name, version)))
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@ import (
|
||||
adminConstants "be.ems/src/framework/constants/admin"
|
||||
"be.ems/src/framework/constants/cachekey"
|
||||
"be.ems/src/framework/constants/common"
|
||||
"be.ems/src/framework/redis"
|
||||
"be.ems/src/framework/database/redis"
|
||||
"be.ems/src/framework/utils/crypto"
|
||||
"be.ems/src/framework/utils/parse"
|
||||
"be.ems/src/framework/vo"
|
||||
@@ -131,9 +131,9 @@ func (s *Account) UpdateLoginDateAndIP(loginUser *vo.LoginUser) bool {
|
||||
func (s *Account) ClearLoginRecordCache(username string) bool {
|
||||
cacheKey := cachekey.PWD_ERR_CNT_KEY + username
|
||||
hasKey, _ := redis.Has("", cacheKey)
|
||||
if hasKey {
|
||||
delOk, _ := redis.Del("", cacheKey)
|
||||
return delOk
|
||||
if hasKey > 0 {
|
||||
err := redis.Del("", cacheKey)
|
||||
return err == nil
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
|
||||
"be.ems/src/framework/constants/cachekey"
|
||||
"be.ems/src/framework/constants/common"
|
||||
"be.ems/src/framework/redis"
|
||||
"be.ems/src/framework/database/redis"
|
||||
"be.ems/src/framework/utils/parse"
|
||||
systemModel "be.ems/src/modules/system/model"
|
||||
systemService "be.ems/src/modules/system/service"
|
||||
|
||||
@@ -18,7 +18,6 @@ import (
|
||||
"be.ems/src/framework/utils/crypto"
|
||||
"be.ems/src/framework/utils/ssh"
|
||||
systemService "be.ems/src/modules/system/service"
|
||||
"github.com/jlaffaye/ftp"
|
||||
)
|
||||
|
||||
var NewProcessor = &BarProcessor{
|
||||
@@ -177,7 +176,7 @@ func (s BarProcessor) putFTP(filePath, fileName string) {
|
||||
Username string `json:"username" binding:"required"`
|
||||
ToIp string `json:"toIp" binding:"required"`
|
||||
ToPort int64 `json:"toPort" binding:"required"`
|
||||
Protocol string `json:"protocol" binding:"required,oneof=ssh ftp"`
|
||||
Enable bool `json:"enable"`
|
||||
Dir string `json:"dir" binding:"required"`
|
||||
}
|
||||
cfg := systemService.NewSysConfigImpl.SelectConfigByKey("sys.exportTable")
|
||||
@@ -195,68 +194,37 @@ func (s BarProcessor) putFTP(filePath, fileName string) {
|
||||
return
|
||||
}
|
||||
}
|
||||
if !cfgData.Enable {
|
||||
return
|
||||
}
|
||||
|
||||
localFilePath := filepath.Join(filePath, fileName)
|
||||
|
||||
if cfgData.Protocol == "ssh" {
|
||||
connSSH := ssh.ConnSSH{
|
||||
User: cfgData.Username,
|
||||
Password: cfgData.Password,
|
||||
Addr: cfgData.ToIp,
|
||||
Port: cfgData.ToPort,
|
||||
AuthMode: "0",
|
||||
}
|
||||
sshClient, err := connSSH.NewClient()
|
||||
if err != nil {
|
||||
logger.Errorf("putFTP ssh error: %v", err)
|
||||
return
|
||||
}
|
||||
defer sshClient.Close()
|
||||
// 网元主机的SSH客户端进行文件传输
|
||||
sftpClient, err := sshClient.NewClientSFTP()
|
||||
if err != nil {
|
||||
logger.Errorf("putFTP sftp error: %v", err)
|
||||
return
|
||||
}
|
||||
defer sftpClient.Close()
|
||||
// 远程文件
|
||||
remotePath := filepath.Join(cfgData.Dir, path.Base(filePath), fileName)
|
||||
// 复制到远程
|
||||
if err = sftpClient.CopyFileLocalToRemote(localFilePath, remotePath); err != nil {
|
||||
logger.Errorf("putFTP uploading error: %v", err)
|
||||
return
|
||||
}
|
||||
connSSH := ssh.ConnSSH{
|
||||
User: cfgData.Username,
|
||||
Password: cfgData.Password,
|
||||
Addr: cfgData.ToIp,
|
||||
Port: cfgData.ToPort,
|
||||
AuthMode: "0",
|
||||
}
|
||||
|
||||
if cfgData.Protocol == "ftp" {
|
||||
// 连接到 FTP 服务器
|
||||
addr := fmt.Sprintf("%s:%d", cfgData.ToIp, cfgData.ToPort)
|
||||
ftpComm, err := ftp.Dial(addr, ftp.DialWithTimeout(15*time.Second))
|
||||
if err != nil {
|
||||
logger.Errorf("putFTP ftp error: %v", err)
|
||||
return
|
||||
}
|
||||
// 登录到 FTP 服务器
|
||||
err = ftpComm.Login(cfgData.Username, cfgData.Password)
|
||||
if err != nil {
|
||||
logger.Errorf("putFTP login error: %v", err)
|
||||
return
|
||||
}
|
||||
defer ftpComm.Quit()
|
||||
// 打开本地文件
|
||||
file, err := os.Open(localFilePath)
|
||||
if err != nil {
|
||||
logger.Errorf("putFTP open error: %v", err)
|
||||
return
|
||||
}
|
||||
defer file.Close()
|
||||
// 远程文件
|
||||
remotePath := filepath.Join(cfgData.Dir, path.Base(filePath), fileName)
|
||||
// 上传文件到 FTP 服务器
|
||||
err = ftpComm.Stor(remotePath, file)
|
||||
if err != nil {
|
||||
logger.Errorf("putFTP uploading error: %v", err)
|
||||
return
|
||||
}
|
||||
sshClient, err := connSSH.NewClient()
|
||||
if err != nil {
|
||||
logger.Errorf("putFTP ssh error: %v", err)
|
||||
return
|
||||
}
|
||||
defer sshClient.Close()
|
||||
// 网元主机的SSH客户端进行文件传输
|
||||
sftpClient, err := sshClient.NewClientSFTP()
|
||||
if err != nil {
|
||||
logger.Errorf("putFTP sftp error: %v", err)
|
||||
return
|
||||
}
|
||||
defer sftpClient.Close()
|
||||
// 远程文件
|
||||
remotePath := filepath.Join(cfgData.Dir, path.Base(filePath), fileName)
|
||||
// 复制到远程
|
||||
if err = sftpClient.CopyFileLocalToRemote(localFilePath, remotePath); err != nil {
|
||||
logger.Errorf("putFTP uploading error: %v", err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,20 +10,28 @@ import (
|
||||
|
||||
"be.ems/features/fm"
|
||||
"be.ems/lib/config"
|
||||
"be.ems/lib/dborm"
|
||||
"be.ems/lib/global"
|
||||
"be.ems/lib/log"
|
||||
"be.ems/src/framework/cron"
|
||||
"be.ems/src/framework/datasource"
|
||||
"be.ems/src/framework/utils/date"
|
||||
"be.ems/src/framework/utils/parse"
|
||||
"github.com/go-resty/resty/v2"
|
||||
|
||||
neModel "be.ems/src/modules/network_element/model"
|
||||
neService "be.ems/src/modules/network_element/service"
|
||||
)
|
||||
|
||||
var NewProcessor = &BarProcessor{
|
||||
progress: 0,
|
||||
count: 0,
|
||||
neConfigBackupService: neService.NewNeConfigBackup,
|
||||
neInfoService: neService.NewNeInfo,
|
||||
progress: 0,
|
||||
count: 0,
|
||||
}
|
||||
|
||||
// bar 队列任务处理
|
||||
type BarProcessor struct {
|
||||
neConfigBackupService *neService.NeConfigBackup // 网元配置文件备份记录服务
|
||||
neInfoService *neService.NeInfo // 网元信息服务
|
||||
// 任务进度
|
||||
progress int
|
||||
// 执行次数
|
||||
@@ -97,32 +105,26 @@ func (s *BarProcessor) Execute(data any) (any, error) {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var nes []dborm.NeInfo
|
||||
_, err = dborm.XormGetAllNeInfo(&nes)
|
||||
if err != nil {
|
||||
log.Error("Failed to get all ne info:", err)
|
||||
return nil, err
|
||||
}
|
||||
|
||||
succActiveAlarmNum := 0
|
||||
failActiveAlarmNum := 0
|
||||
succClearAlarmNum := 0
|
||||
failClearAlarmNum := 0
|
||||
|
||||
for _, ne := range nes {
|
||||
neList := s.neInfoService.SelectList(neModel.NeInfo{}, true, false)
|
||||
for _, ne := range neList {
|
||||
//log.Debug("ne:", ne)
|
||||
|
||||
sql := fmt.Sprintf("select * from ne_state where ne_type='%s' and ne_id='%s' order by `timestamp` desc limit 1", ne.NeType, ne.NeId)
|
||||
log.Debug("SQL:", sql)
|
||||
neState, err := dborm.XormGetDataBySQL(sql)
|
||||
if err != nil {
|
||||
log.Error("Failed to get ne_state:", err)
|
||||
continue
|
||||
}
|
||||
if len(*neState) == 0 {
|
||||
log.Warn("Not found record in ne_state:")
|
||||
//continue
|
||||
}
|
||||
// sql := fmt.Sprintf("select * from ne_state where ne_type='%s' and ne_id='%s' order by `timestamp` desc limit 1", ne.NeType, ne.NeId)
|
||||
// log.Debug("SQL:", sql)
|
||||
// neState, err := dborm.XormGetDataBySQL(sql)
|
||||
// if err != nil {
|
||||
// log.Error("Failed to get ne_state:", err)
|
||||
// continue
|
||||
// }
|
||||
// if len(*neState) == 0 {
|
||||
// log.Warn("Not found record in ne_state:")
|
||||
// //continue
|
||||
// }
|
||||
//log.Debug("neState:", *neState)
|
||||
|
||||
// params := "10000"
|
||||
@@ -138,33 +140,31 @@ func (s *BarProcessor) Execute(data any) (any, error) {
|
||||
|
||||
// log.Debug("alarmDefine:", alarmDefine)
|
||||
|
||||
sql = fmt.Sprintf("select * from alarm where alarm_id = '%s' and ne_type='%s' and ne_id = '%s' order by event_time desc limit 1",
|
||||
// 是否存在告警
|
||||
sql := fmt.Sprintf("select * from alarm where alarm_id = '%s' and ne_type='%s' and ne_id = '%s' order by event_time desc limit 1",
|
||||
alarmDefine.AlarmID, ne.NeType, ne.RmUID)
|
||||
alarm, err := dborm.XormGetDataBySQL(sql)
|
||||
alarm, err := datasource.RawDB("", sql, nil)
|
||||
if err != nil {
|
||||
log.Error("Failed to get alarm:", err)
|
||||
continue
|
||||
}
|
||||
//log.Debug("alarm:", *alarm)
|
||||
|
||||
var timestamp string
|
||||
if len(*neState) == 0 {
|
||||
log.Infof("Not found ne_state neType:%s, neId:%s", ne.NeType, ne.NeId)
|
||||
timestamp = ne.UpdateTime.Format(time.DateTime)
|
||||
} else {
|
||||
timestamp = (*neState)[0]["timestamp"]
|
||||
alarmStatus := "0"
|
||||
if len(alarm) > 0 {
|
||||
alarmStatus = fmt.Sprint(alarm[0]["alarm_status"])
|
||||
}
|
||||
|
||||
// 解析日期时间字符串为时间对象
|
||||
seconds, err := global.GetSecondsSinceDatetime(timestamp)
|
||||
if err != nil {
|
||||
log.Error("Failed to GetSecondsSinceDatetime:", err)
|
||||
continue
|
||||
changeTime := time.UnixMilli(ne.UpdateTime)
|
||||
// 检查状态
|
||||
isOnline := false
|
||||
if ne.ServerState != nil {
|
||||
isOnline = parse.Boolean(ne.ServerState["online"])
|
||||
}
|
||||
log.Debugf("timestamp:%s seconds:%d", timestamp, seconds)
|
||||
|
||||
if seconds <= alarmDefine.Threshold {
|
||||
if len(*alarm) == 0 || (*alarm)[0]["alarm_status"] == fm.AlarmStatusClearString {
|
||||
// 在线且状态为活动告警
|
||||
if isOnline && alarmStatus == "1" {
|
||||
if len(alarm) == 0 {
|
||||
continue
|
||||
}
|
||||
if alarmStatus == "0" {
|
||||
continue
|
||||
}
|
||||
|
||||
@@ -172,7 +172,8 @@ func (s *BarProcessor) Execute(data any) (any, error) {
|
||||
var alarmSeq int = 1
|
||||
threshold := strconv.FormatInt(alarmDefine.Threshold, 10)
|
||||
SpecificProblem := strings.ReplaceAll(alarmDefine.SpecificProblem, "{threshold}", threshold)
|
||||
locationInfo := fmt.Sprintf("SystemManagement.State: NE heartbeat timestamp=%s,threshold=%v", timestamp, alarmDefine.Threshold)
|
||||
timeStr := date.ParseDateToStr(changeTime, date.YYYY_MM_DDTHH_MM_SSZ)
|
||||
locationInfo := fmt.Sprintf("SystemManagement.State: NE heartbeat timestamp=%s,threshold=%v", timeStr, alarmDefine.Threshold)
|
||||
alarmData := &Alarm{
|
||||
AlarmSeq: alarmSeq,
|
||||
AlarmId: alarmDefine.AlarmID,
|
||||
@@ -232,16 +233,15 @@ func (s *BarProcessor) Execute(data any) (any, error) {
|
||||
_ = json.Unmarshal(response.Body(), &body)
|
||||
failClearAlarmNum++
|
||||
}
|
||||
} else {
|
||||
var alarmSeq int = 1
|
||||
if len(*alarm) > 0 && (*alarm)[0]["alarm_status"] == fm.AlarmStatusActiveString {
|
||||
log.Info("System state alarm has exist")
|
||||
continue
|
||||
}
|
||||
}
|
||||
|
||||
// 不在线且状态为清除告警
|
||||
if !isOnline && alarmStatus == "0" {
|
||||
var alarmSeq int = 1
|
||||
threshold := strconv.FormatInt(alarmDefine.Threshold, 10)
|
||||
SpecificProblem := strings.ReplaceAll(alarmDefine.SpecificProblem, "{threshold}", threshold)
|
||||
locationInfo := fmt.Sprintf("SystemManagement.State: NE heartbeat timestamp=%s,threshold=%v", timestamp, alarmDefine.Threshold)
|
||||
timeStr := date.ParseDateToStr(changeTime, date.YYYY_MM_DDTHH_MM_SSZ)
|
||||
locationInfo := fmt.Sprintf("SystemManagement.State: NE heartbeat timestamp=%s threshold=%v", timeStr, alarmDefine.Threshold)
|
||||
alarmData := &Alarm{
|
||||
AlarmSeq: alarmSeq,
|
||||
AlarmId: alarmDefine.AlarmID,
|
||||
|
||||
@@ -2,8 +2,8 @@ package controller
|
||||
|
||||
import (
|
||||
"be.ems/src/framework/constants/cachekey"
|
||||
"be.ems/src/framework/database/redis"
|
||||
"be.ems/src/framework/i18n"
|
||||
"be.ems/src/framework/redis"
|
||||
"be.ems/src/framework/utils/ctx"
|
||||
"be.ems/src/framework/vo/result"
|
||||
"be.ems/src/modules/monitor/model"
|
||||
@@ -116,8 +116,8 @@ func (s *SysCacheController) ClearCacheName(c *gin.Context) {
|
||||
c.JSON(200, result.ErrMsg(err.Error()))
|
||||
return
|
||||
}
|
||||
ok, _ := redis.DelKeys("", cacheKeys)
|
||||
if ok {
|
||||
err = redis.DelKeys("", cacheKeys)
|
||||
if err == nil {
|
||||
c.JSON(200, result.Ok(nil))
|
||||
return
|
||||
}
|
||||
@@ -136,8 +136,8 @@ func (s *SysCacheController) ClearCacheKey(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
ok, _ := redis.Del("", cacheName+":"+cacheKey)
|
||||
if ok {
|
||||
err := redis.Del("", cacheName+":"+cacheKey)
|
||||
if err == nil {
|
||||
c.JSON(200, result.Ok(nil))
|
||||
return
|
||||
}
|
||||
@@ -159,7 +159,7 @@ func (s *SysCacheController) ClearCacheSafe(c *gin.Context) {
|
||||
model.NewSysCacheNames(i18n.TKey(language, "cache.name.ne_data"), cachekey.NE_DATA_KEY),
|
||||
}
|
||||
for _, v := range caches {
|
||||
cacheKeys, err := redis.GetKeys("", v.CacheName+":*")
|
||||
cacheKeys, err := redis.GetKeys("", v.CacheName+"*")
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
|
||||
@@ -6,8 +6,8 @@ import (
|
||||
"strings"
|
||||
|
||||
"be.ems/src/framework/constants/cachekey"
|
||||
"be.ems/src/framework/database/redis"
|
||||
"be.ems/src/framework/i18n"
|
||||
"be.ems/src/framework/redis"
|
||||
"be.ems/src/framework/utils/ctx"
|
||||
"be.ems/src/framework/vo"
|
||||
"be.ems/src/framework/vo/result"
|
||||
@@ -130,8 +130,8 @@ func (s *SysUserOnlineController) ForceLogout(c *gin.Context) {
|
||||
}
|
||||
|
||||
// 删除token
|
||||
ok, _ := redis.Del("", cachekey.LOGIN_TOKEN_KEY+tokenId)
|
||||
if ok {
|
||||
err := redis.Del("", cachekey.LOGIN_TOKEN_KEY+tokenId)
|
||||
if err == nil {
|
||||
c.JSON(200, result.Ok(nil))
|
||||
return
|
||||
}
|
||||
|
||||
@@ -56,7 +56,6 @@ func (s *UPFController) TotalFlow(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
data := s.perfKPIService.SelectUPFTotalFlow(neInfo.NeType, neInfo.RmUID, querys.Day)
|
||||
|
||||
c.JSON(200, result.OkData(data))
|
||||
up, down := s.perfKPIService.UPFTodayFlowFind(neInfo.RmUID, querys.Day)
|
||||
c.JSON(200, result.OkData(map[string]int64{"up": up, "down": down}))
|
||||
}
|
||||
|
||||
@@ -26,8 +26,8 @@ type CDREventIMSQuery struct {
|
||||
RecordType string `json:"recordType" form:"recordType"` // 记录行为 MOC MTC
|
||||
CallerParty string `json:"callerParty" form:"callerParty"` // 主叫号码
|
||||
CalledParty string `json:"calledParty" form:"calledParty"` // 被叫号码
|
||||
StartTime string `json:"startTime" form:"startTime"`
|
||||
EndTime string `json:"endTime" form:"endTime"`
|
||||
StartTime int64 `json:"startTime" form:"startTime"`
|
||||
EndTime int64 `json:"endTime" form:"endTime"`
|
||||
SortField string `json:"sortField" form:"sortField" binding:"omitempty,oneof=timestamp"` // 排序字段,填写结果字段
|
||||
SortOrder string `json:"sortOrder" form:"sortOrder" binding:"omitempty,oneof=asc desc"` // 排序升降序,asc desc
|
||||
PageNum int64 `json:"pageNum" form:"pageNum" binding:"required"`
|
||||
|
||||
@@ -27,8 +27,8 @@ type CDREventSGWCQuery struct {
|
||||
RmUID string `json:"rmUID" form:"rmUID"`
|
||||
IMSI string `json:"imsi" form:"imsi"`
|
||||
MSISDN string `json:"msisdn" form:"msisdn"`
|
||||
StartTime string `json:"startTime" form:"startTime"`
|
||||
EndTime string `json:"endTime" form:"endTime"`
|
||||
StartTime int64 `json:"startTime" form:"startTime"`
|
||||
EndTime int64 `json:"endTime" form:"endTime"`
|
||||
SortField string `json:"sortField" form:"sortField" binding:"omitempty,oneof=timestamp"` // 排序字段,填写结果字段
|
||||
SortOrder string `json:"sortOrder" form:"sortOrder" binding:"omitempty,oneof=asc desc"` // 排序升降序,asc desc
|
||||
PageNum int64 `json:"pageNum" form:"pageNum" binding:"required"`
|
||||
|
||||
@@ -28,8 +28,8 @@ type CDREventSMFQuery struct {
|
||||
RecordType string `json:"recordType" form:"recordType"` // 暂时没用到
|
||||
SubscriberID string `json:"subscriberID" form:"subscriberID"`
|
||||
DNN string `json:"dnn" form:"dnn"`
|
||||
StartTime string `json:"startTime" form:"startTime"`
|
||||
EndTime string `json:"endTime" form:"endTime"`
|
||||
StartTime int64 `json:"startTime" form:"startTime"`
|
||||
EndTime int64 `json:"endTime" form:"endTime"`
|
||||
SortField string `json:"sortField" form:"sortField" binding:"omitempty,oneof=timestamp"` // 排序字段,填写结果字段
|
||||
SortOrder string `json:"sortOrder" form:"sortOrder" binding:"omitempty,oneof=asc desc"` // 排序升降序,asc desc
|
||||
PageNum int64 `json:"pageNum" form:"pageNum" binding:"required"`
|
||||
|
||||
@@ -26,8 +26,8 @@ type CDREventSMSCQuery struct {
|
||||
RecordType string `json:"recordType" form:"recordType"` // 记录行为 MOSM MTSM
|
||||
CallerParty string `json:"callerParty" form:"callerParty"` // 主叫号码
|
||||
CalledParty string `json:"calledParty" form:"calledParty"` // 被叫号码
|
||||
StartTime string `json:"startTime" form:"startTime"`
|
||||
EndTime string `json:"endTime" form:"endTime"`
|
||||
StartTime int64 `json:"startTime" form:"startTime"`
|
||||
EndTime int64 `json:"endTime" form:"endTime"`
|
||||
SortField string `json:"sortField" form:"sortField" binding:"omitempty,oneof=timestamp"` // 排序字段,填写结果字段
|
||||
SortOrder string `json:"sortOrder" form:"sortOrder" binding:"omitempty,oneof=asc desc"` // 排序升降序,asc desc
|
||||
PageNum int64 `json:"pageNum" form:"pageNum" binding:"required"`
|
||||
|
||||
@@ -26,8 +26,8 @@ type UEEventAMFQuery struct {
|
||||
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"`
|
||||
StartTime int64 `json:"startTime" form:"startTime"`
|
||||
EndTime int64 `json:"endTime" form:"endTime"`
|
||||
SortField string `json:"sortField" form:"sortField" binding:"omitempty,oneof=timestamp"` // 排序字段,填写结果字段
|
||||
SortOrder string `json:"sortOrder" form:"sortOrder" binding:"omitempty,oneof=asc desc"` // 排序升降序,asc desc
|
||||
PageNum int64 `json:"pageNum" form:"pageNum" binding:"required"`
|
||||
|
||||
@@ -26,8 +26,8 @@ type UEEventMMEQuery struct {
|
||||
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"`
|
||||
StartTime int64 `json:"startTime" form:"startTime"`
|
||||
EndTime int64 `json:"endTime" form:"endTime"`
|
||||
SortField string `json:"sortField" form:"sortField" binding:"omitempty,oneof=timestamp"` // 排序字段,填写结果字段
|
||||
SortOrder string `json:"sortOrder" form:"sortOrder" binding:"omitempty,oneof=asc desc"` // 排序升降序,asc desc
|
||||
PageNum int64 `json:"pageNum" form:"pageNum" binding:"required"`
|
||||
|
||||
@@ -6,6 +6,7 @@ import (
|
||||
"be.ems/src/framework/middleware/collectlogs"
|
||||
"be.ems/src/framework/middleware/repeat"
|
||||
"be.ems/src/modules/network_data/controller"
|
||||
"be.ems/src/modules/network_data/service"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
@@ -14,6 +15,9 @@ import (
|
||||
func Setup(router *gin.Engine) {
|
||||
logger.Infof("开始加载 ====> network_data 模块路由")
|
||||
|
||||
// 启动时需要的初始参数
|
||||
InitLoad()
|
||||
|
||||
neDataGroup := router.Group("/neData")
|
||||
|
||||
// 性能统计信息
|
||||
@@ -318,3 +322,9 @@ func Setup(router *gin.Engine) {
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
// InitLoad 初始参数
|
||||
func InitLoad() {
|
||||
// 启动时,加载UPF上下行流量
|
||||
go service.NewPerfKPI.UPFTodayFlowLoad(30)
|
||||
}
|
||||
|
||||
@@ -25,15 +25,15 @@ func (r CDREventIMS) SelectByPage(querys model.CDREventIMSQuery) ([]model.CDREve
|
||||
if querys.RmUID != "" {
|
||||
tx = tx.Where("rm_uid = ?", querys.RmUID)
|
||||
}
|
||||
if querys.StartTime != "" {
|
||||
startTime := querys.StartTime
|
||||
if querys.StartTime != 0 {
|
||||
startTime := fmt.Sprintf("%d", querys.StartTime)
|
||||
if len(startTime) == 13 {
|
||||
startTime = startTime[:10]
|
||||
}
|
||||
tx = tx.Where("timestamp >= ?", startTime)
|
||||
}
|
||||
if querys.EndTime != "" {
|
||||
endTime := querys.EndTime
|
||||
if querys.EndTime != 0 {
|
||||
endTime := fmt.Sprintf("%d", querys.EndTime)
|
||||
if len(endTime) == 13 {
|
||||
endTime = endTime[:10]
|
||||
}
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"be.ems/src/framework/datasource"
|
||||
"be.ems/src/framework/logger"
|
||||
"be.ems/src/modules/network_data/model"
|
||||
@@ -22,15 +24,15 @@ func (r CDREventSGWC) SelectByPage(querys model.CDREventSGWCQuery) ([]model.CDRE
|
||||
if querys.RmUID != "" {
|
||||
tx = tx.Where("rm_uid = ?", querys.RmUID)
|
||||
}
|
||||
if querys.StartTime != "" {
|
||||
startTime := querys.StartTime
|
||||
if querys.StartTime != 0 {
|
||||
startTime := fmt.Sprintf("%d", querys.StartTime)
|
||||
if len(startTime) == 13 {
|
||||
startTime = startTime[:10]
|
||||
}
|
||||
tx = tx.Where("timestamp >= ?", startTime)
|
||||
}
|
||||
if querys.EndTime != "" {
|
||||
endTime := querys.EndTime
|
||||
if querys.EndTime != 0 {
|
||||
endTime := fmt.Sprintf("%d", querys.EndTime)
|
||||
if len(endTime) == 13 {
|
||||
endTime = endTime[:10]
|
||||
}
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"be.ems/src/framework/datasource"
|
||||
"be.ems/src/framework/logger"
|
||||
"be.ems/src/modules/network_data/model"
|
||||
@@ -22,15 +24,15 @@ func (r CDREventSMF) SelectByPage(querys model.CDREventSMFQuery) ([]model.CDREve
|
||||
if querys.RmUID != "" {
|
||||
tx = tx.Where("rm_uid = ?", querys.RmUID)
|
||||
}
|
||||
if querys.StartTime != "" {
|
||||
startTime := querys.StartTime
|
||||
if querys.StartTime != 0 {
|
||||
startTime := fmt.Sprintf("%d", querys.StartTime)
|
||||
if len(startTime) == 13 {
|
||||
startTime = startTime[:10]
|
||||
}
|
||||
tx = tx.Where("timestamp >= ?", startTime)
|
||||
}
|
||||
if querys.EndTime != "" {
|
||||
endTime := querys.EndTime
|
||||
if querys.EndTime != 0 {
|
||||
endTime := fmt.Sprintf("%d", querys.EndTime)
|
||||
if len(endTime) == 13 {
|
||||
endTime = endTime[:10]
|
||||
}
|
||||
|
||||
@@ -25,15 +25,15 @@ func (r CDREventSMSC) SelectByPage(querys model.CDREventSMSCQuery) ([]model.CDRE
|
||||
if querys.RmUID != "" {
|
||||
tx = tx.Where("rm_uid = ?", querys.RmUID)
|
||||
}
|
||||
if querys.StartTime != "" {
|
||||
startTime := querys.StartTime
|
||||
if querys.StartTime != 0 {
|
||||
startTime := fmt.Sprintf("%d", querys.StartTime)
|
||||
if len(startTime) == 13 {
|
||||
startTime = startTime[:10]
|
||||
}
|
||||
tx = tx.Where("timestamp >= ?", startTime)
|
||||
}
|
||||
if querys.EndTime != "" {
|
||||
endTime := querys.EndTime
|
||||
if querys.EndTime != 0 {
|
||||
endTime := fmt.Sprintf("%d", querys.EndTime)
|
||||
if len(endTime) == 13 {
|
||||
endTime = endTime[:10]
|
||||
}
|
||||
|
||||
@@ -43,7 +43,6 @@ func (r *UDMAuthUser) SelectPage(query map[string]any) (int64, []model.UDMAuthUs
|
||||
|
||||
// 查询数量 长度为0直接返回
|
||||
if err := tx.Count(&total).Error; err != nil || total <= 0 {
|
||||
logger.Errorf("total err => %v", err)
|
||||
return total, rows
|
||||
}
|
||||
|
||||
|
||||
@@ -46,7 +46,6 @@ func (r *UDMSubUser) SelectPage(query map[string]any) (int64, []model.UDMSubUser
|
||||
|
||||
// 查询数量 长度为0直接返回
|
||||
if err := tx.Count(&total).Error; err != nil || total <= 0 {
|
||||
logger.Errorf("total err => %v", err)
|
||||
return total, rows
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"be.ems/src/framework/datasource"
|
||||
@@ -24,15 +25,15 @@ func (r UEEventAMF) SelectByPage(querys model.UEEventAMFQuery) ([]model.UEEventA
|
||||
if querys.RmUID != "" {
|
||||
tx = tx.Where("rm_uid = ?", querys.RmUID)
|
||||
}
|
||||
if querys.StartTime != "" {
|
||||
startTime := querys.StartTime
|
||||
if querys.StartTime != 0 {
|
||||
startTime := fmt.Sprintf("%d", querys.StartTime)
|
||||
if len(startTime) == 13 {
|
||||
startTime = startTime[:10]
|
||||
}
|
||||
tx = tx.Where("timestamp >= ?", startTime)
|
||||
}
|
||||
if querys.EndTime != "" {
|
||||
endTime := querys.EndTime
|
||||
if querys.EndTime != 0 {
|
||||
endTime := fmt.Sprintf("%d", querys.EndTime)
|
||||
if len(endTime) == 13 {
|
||||
endTime = endTime[:10]
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"be.ems/src/framework/datasource"
|
||||
@@ -24,15 +25,15 @@ func (r UEEventMME) SelectByPage(querys model.UEEventMMEQuery) ([]model.UEEventM
|
||||
if querys.RmUID != "" {
|
||||
tx = tx.Where("rm_uid = ?", querys.RmUID)
|
||||
}
|
||||
if querys.StartTime != "" {
|
||||
startTime := querys.StartTime
|
||||
if querys.StartTime != 0 {
|
||||
startTime := fmt.Sprintf("%d", querys.StartTime)
|
||||
if len(startTime) == 13 {
|
||||
startTime = startTime[:10]
|
||||
}
|
||||
tx = tx.Where("timestamp >= ?", startTime)
|
||||
}
|
||||
if querys.EndTime != "" {
|
||||
endTime := querys.EndTime
|
||||
if querys.EndTime != 0 {
|
||||
endTime := fmt.Sprintf("%d", querys.EndTime)
|
||||
if len(endTime) == 13 {
|
||||
endTime = endTime[:10]
|
||||
}
|
||||
|
||||
@@ -6,9 +6,11 @@ import (
|
||||
"time"
|
||||
|
||||
"be.ems/src/framework/constants/cachekey"
|
||||
"be.ems/src/framework/redis"
|
||||
"be.ems/src/framework/database/redis"
|
||||
"be.ems/src/framework/utils/parse"
|
||||
"be.ems/src/modules/network_data/model"
|
||||
"be.ems/src/modules/network_data/repository"
|
||||
neModel "be.ems/src/modules/network_element/model"
|
||||
)
|
||||
|
||||
// 实例化数据层 PerfKPI 结构体
|
||||
@@ -42,38 +44,101 @@ func (r *PerfKPI) SelectGoldKPITitle(neType string) []model.GoldKPITitle {
|
||||
return r.perfKPIRepository.SelectGoldKPITitle(neType)
|
||||
}
|
||||
|
||||
// SelectUPFTotalFlow 查询UPF总流量 N3上行 N6下行
|
||||
func (r *PerfKPI) SelectUPFTotalFlow(neType, rmUID string, day int) map[string]any {
|
||||
now := time.Now()
|
||||
// UPFTodayFlowFind 查询UPF总流量 N3上行 N6下行
|
||||
// day 统计天数
|
||||
func (r PerfKPI) UPFTodayFlowFind(rmUID string, day int) (int64, int64) {
|
||||
// 获取当前日期
|
||||
endDate := fmt.Sprint(now.UnixMilli())
|
||||
// 将当前日期前几天数
|
||||
startDate := fmt.Sprint(now.AddDate(0, 0, -day).Truncate(24 * time.Hour).UnixMilli())
|
||||
now := time.Now()
|
||||
var upTotal, downTotal int64
|
||||
|
||||
var info map[string]any
|
||||
// 查询最近day天的数据
|
||||
for i := 0; i <= day; i++ {
|
||||
dateKey := now.AddDate(0, 0, -i).Format("2006-01-02")
|
||||
key := fmt.Sprintf("%sUPF_FLOW:%s:%s", cachekey.NE_DATA_KEY, rmUID, dateKey)
|
||||
|
||||
// 读取缓存数据 小于2分钟重新缓存
|
||||
key := fmt.Sprintf("%sUPF:totalFlow:%s_%d", cachekey.NE_DATA_KEY, rmUID, day)
|
||||
infoStr, _ := redis.Get("", key)
|
||||
if infoStr != "" {
|
||||
json.Unmarshal([]byte(infoStr), &info)
|
||||
expireSecond, _ := redis.GetExpire("", key)
|
||||
if expireSecond > 120 {
|
||||
return info
|
||||
// 读取缓存数据
|
||||
up, err := redis.GetHash("", key, "up")
|
||||
if err != nil || up == "" {
|
||||
up = "0"
|
||||
}
|
||||
down, err := redis.GetHash("", key, "down")
|
||||
if err != nil || down == "" {
|
||||
down = "0"
|
||||
}
|
||||
|
||||
upTotal += parse.Number(up)
|
||||
downTotal += parse.Number(down)
|
||||
}
|
||||
|
||||
return upTotal, downTotal
|
||||
}
|
||||
|
||||
// UPFTodayFlow UPF流量今日统计
|
||||
func (r PerfKPI) UPFTodayFlowUpdate(rmUID string, upValue, downValue int64) error {
|
||||
// 按日期存储统计数据
|
||||
dateKey := time.Now().Format("2006-01-02")
|
||||
key := fmt.Sprintf("%sUPF_FLOW:%s:%s", cachekey.NE_DATA_KEY, rmUID, dateKey)
|
||||
|
||||
// 使用HIncrBy实时累加统计值
|
||||
if err := redis.IncrBy("", key, "up", upValue); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := redis.IncrBy("", key, "down", downValue); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// UPFTodayFlowLoad UPF上下行数据到redis
|
||||
// day 统计天数
|
||||
func (r PerfKPI) UPFTodayFlowLoad(day int) {
|
||||
cacheKeys, _ := redis.GetKeys("", cachekey.NE_KEY+"UPF:*")
|
||||
if len(cacheKeys) == 0 {
|
||||
return
|
||||
}
|
||||
|
||||
now := time.Now()
|
||||
for _, key := range cacheKeys {
|
||||
var v neModel.NeInfo
|
||||
jsonStr, _ := redis.Get("", key)
|
||||
if len(jsonStr) > 7 {
|
||||
json.Unmarshal([]byte(jsonStr), &v)
|
||||
}
|
||||
if v.NeType == "UPF" && v.RmUID != "" {
|
||||
// 查询最近day天的数据
|
||||
for i := 0; i <= day; i++ {
|
||||
dateKey := now.AddDate(0, 0, -i).Format("2006-01-02")
|
||||
key := fmt.Sprintf("%sUPF_FLOW:%s:%s", cachekey.NE_DATA_KEY, v.RmUID, dateKey)
|
||||
// 根据传入天数计算时间范围
|
||||
beginTime := now.AddDate(0, 0, -i).Truncate(24 * time.Hour).UnixMilli()
|
||||
endTime := beginTime + 24*60*60*1000 - 1
|
||||
// 查询历史数据
|
||||
// down * 8 / 1000 / 1000 单位M
|
||||
info := r.perfKPIRepository.SelectUPFTotalFlow("UPF", v.RmUID, fmt.Sprint(beginTime), fmt.Sprint(endTime))
|
||||
if v, ok := info["up"]; ok && v == nil {
|
||||
info["up"] = 0
|
||||
}
|
||||
if v, ok := info["down"]; ok && v == nil {
|
||||
info["down"] = 0
|
||||
}
|
||||
|
||||
upTotal := parse.Number(info["up"])
|
||||
downTotal := parse.Number(info["down"])
|
||||
|
||||
err := redis.SetHash("", key, map[string]any{
|
||||
"up": upTotal,
|
||||
"down": downTotal,
|
||||
})
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
// 设置key的过期时间为30天,自动清理旧数据
|
||||
daySub := (30 - i) * 24
|
||||
err = redis.Expire("", key, time.Duration(daySub)*time.Hour)
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// down * 8 / 1000 / 1000 单位M
|
||||
info = r.perfKPIRepository.SelectUPFTotalFlow(neType, rmUID, startDate, endDate)
|
||||
if v, ok := info["up"]; ok && v == nil {
|
||||
info["up"] = 0
|
||||
}
|
||||
if v, ok := info["down"]; ok && v == nil {
|
||||
info["down"] = 0
|
||||
}
|
||||
|
||||
// 保存到缓存
|
||||
infoJSON, _ := json.Marshal(info)
|
||||
redis.SetByExpire("", key, string(infoJSON), time.Duration(10)*time.Minute)
|
||||
|
||||
return info
|
||||
}
|
||||
|
||||
@@ -58,7 +58,7 @@ func (r CDREventSGWC) ExportXlsx(rows []model.CDREventSGWC, fileName string) (st
|
||||
"H1": "GPRS Downlink",
|
||||
"I1": "Duration",
|
||||
"J1": "Invocation Time",
|
||||
"K1": "PGW Address Used",
|
||||
"K1": "PGW Address",
|
||||
"L1": "SGW Address",
|
||||
"M1": "RAT Type",
|
||||
"N1": "PDPPDN Type",
|
||||
@@ -69,6 +69,8 @@ func (r CDREventSGWC) ExportXlsx(rows []model.CDREventSGWC, fileName string) (st
|
||||
"S1": "Record Cause For Rec Closing",
|
||||
"T1": "Record Sequence Number",
|
||||
"U1": "Local Record Sequence Number",
|
||||
"V1": "Record Type",
|
||||
"W1": "Record Opening Time",
|
||||
}
|
||||
// 从第二行开始的数据
|
||||
dataCells := make([]map[string]any, 0)
|
||||
@@ -100,11 +102,26 @@ func (r CDREventSGWC) ExportXlsx(rows []model.CDREventSGWC, fileName string) (st
|
||||
pGWAddressUsed := ""
|
||||
if v, ok := cdrJSON["pGWAddressUsed"]; ok && v != nil {
|
||||
pGWAddressUsed = fmt.Sprint(v)
|
||||
headerCells["K1"] = "PGW Address"
|
||||
}
|
||||
if v, ok := cdrJSON["GGSNAddress"]; ok && v != nil {
|
||||
pGWAddressUsed = fmt.Sprint(v)
|
||||
headerCells["K1"] = "GGSN Address"
|
||||
}
|
||||
// sGWAddress
|
||||
sGWAddress := ""
|
||||
if v, ok := cdrJSON["sGWAddress"]; ok && v != nil {
|
||||
sGWAddress = fmt.Sprint(v)
|
||||
headerCells["L1"] = "SGW Address"
|
||||
}
|
||||
if v, ok := cdrJSON["SGSNAddress"]; ok && v != nil {
|
||||
sGWAddress = fmt.Sprint(v)
|
||||
headerCells["L1"] = "SGSN Address"
|
||||
}
|
||||
// recordType
|
||||
recordType := ""
|
||||
if v, ok := cdrJSON["recordType"]; ok && v != nil {
|
||||
recordType = fmt.Sprint(v)
|
||||
}
|
||||
// rATType
|
||||
rATType := ""
|
||||
@@ -208,6 +225,8 @@ func (r CDREventSGWC) ExportXlsx(rows []model.CDREventSGWC, fileName string) (st
|
||||
"S" + idx: causeForRecClosing,
|
||||
"T" + idx: recordSequenceNumber,
|
||||
"U" + idx: localRecordSequenceNumber,
|
||||
"V" + idx: recordType,
|
||||
"W" + idx: invocationTimestamp,
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"be.ems/src/framework/redis"
|
||||
"be.ems/src/framework/database/redis"
|
||||
"be.ems/src/modules/network_data/model"
|
||||
"be.ems/src/modules/network_data/repository"
|
||||
neService "be.ems/src/modules/network_element/service"
|
||||
@@ -49,13 +49,13 @@ func (r *UDMAuthUser) dataByRedis(imsi, neId string) []model.UDMAuthUser {
|
||||
}
|
||||
|
||||
for k, m := range mkv {
|
||||
if k == "-" {
|
||||
if len(k) != 20 {
|
||||
continue
|
||||
}
|
||||
|
||||
// 跳过-号数据 ausf:360000100000130
|
||||
imsi := k[5:]
|
||||
if strings.Contains(imsi, "-") {
|
||||
imsi, hasPrefix := strings.CutPrefix(k, "ausf:")
|
||||
if strings.Contains(imsi, "-") || !hasPrefix {
|
||||
continue
|
||||
}
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"be.ems/src/framework/redis"
|
||||
"be.ems/src/framework/database/redis"
|
||||
"be.ems/src/modules/network_data/model"
|
||||
"be.ems/src/modules/network_data/repository"
|
||||
neService "be.ems/src/modules/network_element/service"
|
||||
@@ -50,13 +50,13 @@ func (r *UDMSubUser) dataByRedis(imsi, neId string) []model.UDMSubUser {
|
||||
}
|
||||
|
||||
for k, m := range mkv {
|
||||
if k == "-" {
|
||||
if len(k) != 22 {
|
||||
continue
|
||||
}
|
||||
|
||||
// 跳过-号数据 udm-sd:360000100000130
|
||||
imsi := k[7:]
|
||||
if strings.Contains(imsi, "-") {
|
||||
imsi, hasPrefix := strings.CutPrefix(k, "udm-sd:")
|
||||
if strings.Contains(imsi, "-") || !hasPrefix {
|
||||
continue
|
||||
}
|
||||
|
||||
|
||||
@@ -3,8 +3,8 @@ package controller
|
||||
import (
|
||||
"strings"
|
||||
|
||||
"be.ems/src/framework/database/redis"
|
||||
"be.ems/src/framework/i18n"
|
||||
"be.ems/src/framework/redis"
|
||||
"be.ems/src/framework/telnet"
|
||||
"be.ems/src/framework/utils/ctx"
|
||||
"be.ems/src/framework/utils/parse"
|
||||
|
||||
@@ -15,7 +15,7 @@ import (
|
||||
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)
|
||||
resBytes, err := fetch.Get(neUrl, nil, 2000)
|
||||
if err != nil {
|
||||
logger.Errorf("NeState %s", err.Error())
|
||||
return nil, fmt.Errorf("NeService System State API Error")
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user