diff --git a/database/install/ne_info.sql b/database/install/ne_info.sql index 739b86ec..bbf79a1b 100644 --- a/database/install/ne_info.sql +++ b/database/install/ne_info.sql @@ -34,5 +34,6 @@ CREATE TABLE `ne_info` ( -- 初始网元数据 INSERT INTO `ne_info` VALUES (1, 'OMC', '001', '4400PSAPOMC001', 'PSAP门户管理中心', '172.16.5.100', 33030, 'PNF', '-', '-', '-', '-', '1,2', 0, '', '', 0, '', 0); INSERT INTO `ne_info` VALUES (2, 'MF', '001', '4400PSAPMF0001', 'PSAP紧急呼叫中心', '172.16.5.110', 33030, 'PNF', '-', '-', '-', '-', '3,4', 0, '', '', 0, '', 0); +INSERT INTO `ne_info` VALUES (3, 'CBC', '001', '4400PSAPCBC001', 'PSAP小区广播中心', '172.16.5.120', 33030, 'PNF', '-', '-', '-', '-', '3,4', 0, '', '', 0, '', 0); SET FOREIGN_KEY_CHECKS=1; diff --git a/database/install/sys_dict_data1_i18n_zh.sql b/database/install/sys_dict_data1_i18n_zh.sql index 43cb4229..afbf4727 100644 --- a/database/install/sys_dict_data1_i18n_zh.sql +++ b/database/install/sys_dict_data1_i18n_zh.sql @@ -723,5 +723,7 @@ INSERT INTO `sys_dict_data` VALUES (20006, 4, 'callback.status.NO_ANSWER_2', ' INSERT INTO `sys_dict_data` VALUES (20007, 5, 'callback.status.TIMEOUT', '超时', 'callback_status', NULL, NULL, '1', 'supervisor', 1749784100809, '', 0, NULL); INSERT INTO `sys_dict_data` VALUES (20008, 6, 'callback.status.PENDING', '挂起', 'callback_status', NULL, NULL, '1', 'supervisor', 1749784115379, '', 0, NULL); INSERT INTO `sys_dict_data` VALUES (20009, 7, 'callback.status.CLOSED', '关闭', 'callback_status', NULL, NULL, '1', 'supervisor', 1749784127612, '', 0, NULL); +INSERT INTO `sys_dict_data` VALUES (20010, 20010, 'job.export.cdr.mf', '定期导出MF话单', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (20011, 20011, 'job.psap.ticket.monitor', '回拨工单监控', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, ''); SET FOREIGN_KEY_CHECKS = 1; diff --git a/database/install/sys_dict_data2_i18n_en.sql b/database/install/sys_dict_data2_i18n_en.sql index 9a09b4a5..2e9b2a93 100644 --- a/database/install/sys_dict_data2_i18n_en.sql +++ b/database/install/sys_dict_data2_i18n_en.sql @@ -723,5 +723,7 @@ INSERT INTO `sys_dict_data` VALUES (25006, 4, 'callback.status.NO_ANSWER_2', 'NO INSERT INTO `sys_dict_data` VALUES (25007, 5, 'callback.status.TIMEOUT', 'TIMEOUT', 'callback_status', NULL, NULL, '1', 'supervisor', 1749784100809, '', 0, NULL); INSERT INTO `sys_dict_data` VALUES (25008, 6, 'callback.status.PENDING', 'PENDING', 'callback_status', NULL, NULL, '1', 'supervisor', 1749784115379, '', 0, NULL); INSERT INTO `sys_dict_data` VALUES (25009, 7, 'callback.status.CLOSED', 'CLOSED', 'callback_status', NULL, NULL, '1', 'supervisor', 1749784127612, '', 0, NULL); +INSERT INTO `sys_dict_data` VALUES (25010, 25010, 'job.export.cdr.mf', 'Regularly Export MF CDR', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (25011, 25011, 'job.psap.ticket.monitor', 'Callback Ticket Monitor', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, ''); SET FOREIGN_KEY_CHECKS = 1; diff --git a/database/install/sys_job.sql b/database/install/sys_job.sql index 218c2425..61a0b7f8 100644 --- a/database/install/sys_job.sql +++ b/database/install/sys_job.sql @@ -30,19 +30,14 @@ CREATE TABLE `sys_job` ( -- ---------------------------- INSERT INTO `sys_job` VALUES (1, 'job.monitor_sys_resource', 'SYSTEM', 'monitor_sys_resource', '{\"interval\":5}', '0 0/5 * * * ?', '3', '0', '1', '0', 'supervisor', 1698478134839, 'supervisor', 1700571615807, 'job.monitor_sys_resource_remark'); INSERT INTO `sys_job` VALUES (2, 'job.ne_config_backup', 'SYSTEM', 'ne_config_backup', '', '0 30 0 * * ?', '3', '0', '1', '1', 'supervisor', 1698478134839, 'supervisor', 1700571615807, 'job.ne_config_backup_remark'); -INSERT INTO `sys_job` VALUES (3, 'job.ne_data_udm', 'SYSTEM', 'ne_data_udm', '', '0 0 0/12 * * ?', '3', '0', '1', '1', 'supervisor', 1730173767412, '', 0, ''); INSERT INTO `sys_job` VALUES (4, 'job.delExpiredNeBackup', 'SYSTEM', 'delExpiredNeBackup', '{\"duration\":60}', '0 20 0 * * ?', '3', '0', '0', '1', 'supervisor', 1698478134840, NULL, 0, 'job.delExpiredNeBackupRemark'); INSERT INTO `sys_job` VALUES (5, 'job.deleteExpiredAlarmRecord', 'SYSTEM', 'deleteExpiredRecord', '{\"duration\":90,\"tableName\":\"alarm\",\"colName\":\"event_time\",\"extras\":\"alarm_status=\'0\'\"}', '0 10 0 * * ?', '3', '0', '1', '1', 'supervisor', 1698478134841, NULL, 0, 'job.deleteExpiredAlarmRecordRemark'); -INSERT INTO `sys_job` VALUES (6, 'job.deleteExpiredKpiRecord', 'SYSTEM', 'deleteExpiredRecord', '{\"duration\":30,\"tableName\":\"gold_kpi\",\"colName\":\"date\"}', '0 15 0 * * ?', '3', '0', '1', '1', 'supervisor', 1698478134842, 'supervisor', 1700570673113, 'job.deleteExpiredKpiRecordRemark'); INSERT 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', '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,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, ''); +INSERT INTO `sys_job` VALUES (15, 'job.removeExportedFiles', 'SYSTEM', 'removeFile', '[{\"filePath\":\"/usr/local/omc/backup/mf_cdr\",\"maxDays\":30}]', '0 10 0 * * ?', '3', '0', '1', '1', 'supervisor', 1698478134842, 'admin', 1728634085631, ''); +INSERT INTO `sys_job` VALUES (100, 'job.export.cdr.mf', 'SYSTEM', 'exportTable', '{\"duration\":1,\"tableName\":\"cdr_event_mf\",\"columns\":\"id,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.recordType\')) as recordType,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.callerParty\')) as callerParty,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.calledParty\')) as calledParty,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.seizureTime\')) as seizureTime,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.answerTime\')) as answerTime,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.releaseTime\')) as releaseTime,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.callDuration\')) as callDuration,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.recordPath\')) as recordPath,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.msdData\')) as msdData,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.serviceResult\')) as serviceResult\",\"timeCol\":\"timestamp\",\"timeUnit\":\"second\",\"extras\":\"\",\"filePath\":\"/usr/local/omc/backup/mf_cdr\"}', '0 40 0 * * ?', '3', '0', '1', '1', 'admin', (UNIX_TIMESTAMP(NOW(3)) * 1000), '', NULL, ''); +INSERT INTO `sys_job` VALUES (101, 'job.psap.ticket.monitor', 'SYSTEM', 'psap_ticket_monitor', '{}', '0/5 * * * * ?', '3', '0', '1', '1', 'admin', (UNIX_TIMESTAMP(NOW(3)) * 1000), '', NULL, ''); SET FOREIGN_KEY_CHECKS = 1; diff --git a/database/install/sys_role_menu.sql b/database/install/sys_role_menu.sql index 6cc20f71..1a13db7a 100644 --- a/database/install/sys_role_menu.sql +++ b/database/install/sys_role_menu.sql @@ -37,6 +37,8 @@ INSERT INTO `sys_role_menu` VALUES (2, 101); INSERT INTO `sys_role_menu` VALUES (2, 102); INSERT INTO `sys_role_menu` VALUES (2, 108); INSERT INTO `sys_role_menu` VALUES (2, 115); +INSERT INTO `sys_role_menu` VALUES (2, 116); +INSERT INTO `sys_role_menu` VALUES (2, 117); INSERT INTO `sys_role_menu` VALUES (2, 500); INSERT INTO `sys_role_menu` VALUES (2, 1000); INSERT INTO `sys_role_menu` VALUES (2, 1001); @@ -61,6 +63,10 @@ INSERT INTO `sys_role_menu` VALUES (2, 1041); INSERT INTO `sys_role_menu` VALUES (2, 1048); INSERT INTO `sys_role_menu` VALUES (2, 1049); INSERT INTO `sys_role_menu` VALUES (2, 1050); +INSERT INTO `sys_role_menu` VALUES (2, 1051); +INSERT INTO `sys_role_menu` VALUES (2, 1053); +INSERT INTO `sys_role_menu` VALUES (2, 1055); +INSERT INTO `sys_role_menu` VALUES (2, 1056); INSERT INTO `sys_role_menu` VALUES (2, 2087); INSERT INTO `sys_role_menu` VALUES (2, 2088); INSERT INTO `sys_role_menu` VALUES (2, 2089); diff --git a/database/upgrade/upg_ne_info.sql b/database/upgrade/upg_ne_info.sql new file mode 100644 index 00000000..c8ff058b --- /dev/null +++ b/database/upgrade/upg_ne_info.sql @@ -0,0 +1,40 @@ +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- +-- Table structure for table `ne_info` +-- + + +CREATE TABLE IF NOT EXISTS `ne_info` ( + `id` int NOT NULL AUTO_INCREMENT, + `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `ne_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '', + `rm_uid` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', + `ne_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', + `ip` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', + `port` int DEFAULT '0' COMMENT '端口', + `pv_flag` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT 'PNF' COMMENT '''PNF'',''VNF''', + `province` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '-' COMMENT '省份地域', + `vendor_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '-', + `dn` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '', + `ne_address` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT 'MAC地址', + `host_ids` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '网元主机ID组 数据格式(ssh,telnet)-来自ne_host表', + `status` int DEFAULT '0' COMMENT '0离线 1在线 2配置待下发 3备用模式', + `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '备注', + `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 '更新时间', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE KEY `ux_netype_neid` (`ne_type`,`ne_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='网元信息表 对应一个网元版本、网元授权、网元主机'; + +-- 初始网元数据 +INSERT IGNORE INTO `ne_info` VALUES (1, 'OMC', '001', '4400PSAPOMC001', 'PSAP门户管理中心', '172.16.5.100', 33030, 'PNF', '-', '-', '-', '-', '1,2', 0, '', '', 0, '', 0); +INSERT IGNORE INTO `ne_info` VALUES (2, 'MF', '001', '4400PSAPMF0001', 'PSAP紧急呼叫中心', '172.16.5.110', 33030, 'PNF', '-', '-', '-', '-', '3,4', 0, '', '', 0, '', 0); +INSERT IGNORE INTO `ne_info` VALUES (3, 'CBC', '001', '4400PSAPCBC001', 'PSAP小区广播中心', '172.16.5.120', 33030, 'PNF', '-', '-', '-', '-', '3,4', 0, '', '', 0, '', 0); +INSERT IGNORE INTO `ne_info` VALUES (4, 'IMS', '001', '4400PSAPIMS001', 'PSAP彩铃中心', '172.16.5.130', 33030, 'PNF', '-', '-', '-', '-', '3,4', 0, '', '', 0, '', 0); +INSERT IGNORE INTO `ne_info` VALUES (5, 'SMSC', '001', '4400PSAPSMSC01', 'PSAP彩信中心', '172.16.5.140', 33030, 'PNF', '-', '-', '-', '-', '3,4', 0, '', '', 0, '', 0); + +SET FOREIGN_KEY_CHECKS=1; diff --git a/database/upgrade/upg_sys_dict_data_en.sql b/database/upgrade/upg_sys_dict_data_en.sql new file mode 100644 index 00000000..54ac1f3b --- /dev/null +++ b/database/upgrade/upg_sys_dict_data_en.sql @@ -0,0 +1,6 @@ +SET FOREIGN_KEY_CHECKS=0; + +INSERT IGNORE INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `tag_class`, `tag_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (25010, 25010, 'job.export.cdr.mf', 'Regularly Export MF CDR', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, ''); +INSERT IGNORE INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `tag_class`, `tag_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (25011, 25011, 'job.psap.ticket.monitor', 'Callback Ticket Monitor', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, ''); + +SET FOREIGN_KEY_CHECKS=1; \ No newline at end of file diff --git a/database/upgrade/upg_sys_dict_data_zh.sql b/database/upgrade/upg_sys_dict_data_zh.sql new file mode 100644 index 00000000..27680c28 --- /dev/null +++ b/database/upgrade/upg_sys_dict_data_zh.sql @@ -0,0 +1,6 @@ +SET FOREIGN_KEY_CHECKS=0; + +INSERT IGNORE INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `tag_class`, `tag_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (20010, 20010, 'job.export.cdr.mf', '定期导出MF话单', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, ''); +INSERT IGNORE INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `tag_class`, `tag_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (20011, 20011, 'job.psap.ticket.monitor', '回拨工单监控', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, ''); + +SET FOREIGN_KEY_CHECKS=1; \ No newline at end of file diff --git a/database/upgrade/upg_sys_job.sql b/database/upgrade/upg_sys_job.sql new file mode 100644 index 00000000..9120cf6d --- /dev/null +++ b/database/upgrade/upg_sys_job.sql @@ -0,0 +1,14 @@ +SET FOREIGN_KEY_CHECKS=0; + +DELETE FROM `sys_job` WHERE `job_id` = 3; +DELETE FROM `sys_job` WHERE `job_id` = 6; +DELETE FROM `sys_job` WHERE `job_id` = 11; +DELETE FROM `sys_job` WHERE `job_id` = 12; +DELETE FROM `sys_job` WHERE `job_id` = 13; +DELETE FROM `sys_job` WHERE `job_id` = 14; +DELETE FROM `sys_job` WHERE `job_id` = 16; +INSERT IGNORE INTO `sys_job` (`job_id`, `job_name`, `job_group`, `invoke_target`, `target_params`, `cron_expression`, `misfire_policy`, `concurrent`, `status`, `save_log`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (100, 'job.export.cdr.mf', 'SYSTEM', 'exportTable', '{\"duration\":1,\"tableName\":\"cdr_event_mf\",\"columns\":\"id,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.recordType\')) as recordType,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.callerParty\')) as callerParty,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.calledParty\')) as calledParty,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.seizureTime\')) as seizureTime,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.answerTime\')) as answerTime,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.releaseTime\')) as releaseTime,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.callDuration\')) as callDuration,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.recordPath\')) as recordPath,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.msdData\')) as msdData,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.serviceResult\')) as serviceResult\",\"timeCol\":\"timestamp\",\"timeUnit\":\"second\",\"extras\":\"\",\"filePath\":\"/usr/local/omc/backup/mf_cdr\"}', '0 40 0 * * ?', '3', '0', '1', '1', 'admin', 1698478134842, '', 0, ''); +INSERT IGNORE INTO `sys_job` (`job_id`, `job_name`, `job_group`, `invoke_target`, `target_params`, `cron_expression`, `misfire_policy`, `concurrent`, `status`, `save_log`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (101, 'job.psap.ticket.monitor', 'SYSTEM', 'psap_ticket_monitor', '{}', '0/5 * * * * ?', '3', '0', '1', '1', 'admin', 1750406767785, '', NULL, ''); +UPDATE `sys_job` SET `job_name` = 'job.removeExportedFiles', `job_group` = 'SYSTEM', `invoke_target` = 'removeFile', `target_params` = '[{\"filePath\":\"/usr/local/omc/backup/mf_cdr\",\"maxDays\":30}]', `cron_expression` = '0 10 0 * * ?', `misfire_policy` = '3', `concurrent` = '0', `status` = '1', `save_log` = '1', `create_by` = 'supervisor', `create_time` = 1698478134842, `update_by` = 'admin', `update_time` = 1728634085631, `remark` = '' WHERE `job_id` = 15; + +SET FOREIGN_KEY_CHECKS=1; \ No newline at end of file diff --git a/database/upgrade/upg_sys_role_menu.sql b/database/upgrade/upg_sys_role_menu.sql new file mode 100644 index 00000000..d3d36fd1 --- /dev/null +++ b/database/upgrade/upg_sys_role_menu.sql @@ -0,0 +1,11 @@ +SET FOREIGN_KEY_CHECKS = 0; + +INSERT IGNORE INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (2, 2); +INSERT IGNORE INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (2, 116); +INSERT IGNORE INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (2, 117); +INSERT IGNORE INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (2, 1051); +INSERT IGNORE INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (2, 1053); +INSERT IGNORE INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (2, 1055); +INSERT IGNORE INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (2, 1056); + +SET FOREIGN_KEY_CHECKS = 1; \ No newline at end of file diff --git a/features/cdr/cdrevent.go b/features/cdr/cdrevent.go index a6a58dd5..d39893cb 100644 --- a/features/cdr/cdrevent.go +++ b/features/cdr/cdrevent.go @@ -11,6 +11,7 @@ import ( "be.ems/lib/config" "be.ems/lib/core/ctx" "be.ems/lib/dborm" + "be.ems/lib/email" "be.ems/lib/log" "be.ems/lib/services" neService "be.ems/src/modules/network_element/service" @@ -115,6 +116,15 @@ func PostCDREventFrom(w http.ResponseWriter, r *http.Request) { // 选择下一个要分配的座席 selectedAgent := mfService.SelectNextAgent(agentResp.Data, lastAgent) + // 获取分配座席的邮箱 + agentEmail := "" + for _, agent := range agentResp.Data { + if agent.Name == selectedAgent { + agentEmail = agent.Email + break + } + } + // 创建回调工单 var updatedAt *int64 = nil ticket := ueCallBackTicket.CallbackTicket{ @@ -133,6 +143,12 @@ func PostCDREventFrom(w http.ResponseWriter, r *http.Request) { // services.ResponseInternalServerError500ProcessError(w, err) // return } + // 新工单分配后发送邮件通知 + if agentEmail != "" { + subject := "新工单分配通知" + body := fmt.Sprintf("您被分配了一个新的回拨工单,主叫号码:%s", ticket.CallerNumber) + go email.SendEmail(agentEmail, subject, body) // 异步发送 + } } // MF网元类型特殊处理, 处理座席回拨的工单流转 diff --git a/features/ue/mf_callback_ticket/service.go b/features/ue/mf_callback_ticket/service.go index 013938a3..7235336e 100644 --- a/features/ue/mf_callback_ticket/service.go +++ b/features/ue/mf_callback_ticket/service.go @@ -5,6 +5,7 @@ import ( "time" "be.ems/lib/dborm" + "be.ems/lib/email" "gorm.io/gorm" ) @@ -347,6 +348,15 @@ func (s *CallbackTicketService) UpdateTicketToTimeout(ticket *CallbackTicket, or lastAgent := ticket.AgentName newAgent := s.SelectNextAgent(agents, lastAgent) + // 查找新座席邮箱 + newAgentEmail := "" + for _, agent := range agents { + if agent.Name == newAgent { + newAgentEmail = agent.Email + break + } + } + // 3. 创建新工单 newTicket := CallbackTicket{ CallerNumber: ticket.CallerNumber, @@ -363,5 +373,12 @@ func (s *CallbackTicketService) UpdateTicketToTimeout(ticket *CallbackTicket, or return fmt.Errorf("创建新工单失败: %w", err) } + // 新工单分配后发送邮件通知 + if newAgentEmail != "" { + subject := "新工单自动重建通知" + body := fmt.Sprintf("您被分配了一个自动重建的回拨工单,主叫号码:%s", newTicket.CallerNumber) + go email.SendEmail(newAgentEmail, subject, body) + } + return nil } diff --git a/lib/email/email.go b/lib/email/email.go new file mode 100644 index 00000000..a5fbaa53 --- /dev/null +++ b/lib/email/email.go @@ -0,0 +1,19 @@ +package email + +import "net/smtp" + +// 简单邮件发送函数 +func SendEmail(to, subject, body string) error { + from := "your@email.com" + password := "your_password" + smtpHost := "smtp.yourserver.com" + smtpPort := "587" + + msg := "From: " + from + "\n" + + "To: " + to + "\n" + + "Subject: " + subject + "\n\n" + + body + + auth := smtp.PlainAuth("", from, password, smtpHost) + return smtp.SendMail(smtpHost+":"+smtpPort, auth, from, []string{to}, []byte(msg)) +} diff --git a/src/modules/crontask/processor/psap_ticket_monitor/psap_ticket_monitor.go b/src/modules/crontask/processor/psap_ticket_monitor/psap_ticket_monitor.go index 5b351581..04afd7f9 100644 --- a/src/modules/crontask/processor/psap_ticket_monitor/psap_ticket_monitor.go +++ b/src/modules/crontask/processor/psap_ticket_monitor/psap_ticket_monitor.go @@ -34,10 +34,10 @@ func (s *PsapTicketMonitor) Execute(data any) (any, error) { "count": s.count, } - // 处理超时的NEW状态工单 (30分钟) + // 处理超时的NEW状态工单 (60分钟) newTicketsUpdated, err := s.handleTimeoutTickets( ueCallBackTicket.TicketStatusNew.Enum(), - 30*60*1000000, // 30分钟(微秒) + 60*1000000, // 60分钟(微秒) ) if err != nil { logger.Errorf("处理NEW状态超时工单失败: %v", err) diff --git a/src/modules/network_element/repository/ne_info.go b/src/modules/network_element/repository/ne_info.go index 23ea4edb..589c0d48 100644 --- a/src/modules/network_element/repository/ne_info.go +++ b/src/modules/network_element/repository/ne_info.go @@ -21,6 +21,8 @@ func (r NeInfo) neListSort(arr []model.NeInfo) []model.NeInfo { "OMC", "CBC", "MF", + "IMS", + "SMSC", } // 创建优先级映射