扫描当前时间到前两小时的话单数据。扫描范围内的数据,满足以下规则,即认为异常。 1)、时间范围内单次拨打电话通话时间过长监控 在扫描时间范围内,国际拨打的一通电话通话时长超过15分钟(可自行配置)分钟以上。 2)、时间范围内拨打同一个号码次数监控 在扫描时间范围内,同一个被叫国际号码总共被拨打的次数5次(可自行配置)以上。 3)、时间范围内拨打国际长途次数监控 在扫描时间范围内,号码总共拨打国际长途的次数10次(可自行配置)以上。异常信息也要显示,mysql具体实现
时间: 2024-03-17 20:46:02 浏览: 12
好的,以下是具体的MySQL实现:
1. 创建话单表
```
CREATE TABLE call_record (
id INT PRIMARY KEY AUTO_INCREMENT,
call_time DATETIME NOT NULL,
caller_number VARCHAR(20) NOT NULL,
callee_number VARCHAR(20) NOT NULL,
call_duration INT NOT NULL,
call_type INT NOT NULL
);
```
其中,call_time表示通话时间,caller_number表示主叫号码,callee_number表示被叫号码,call_duration表示通话时长(单位为秒),call_type表示通话类型(0表示国内通话,1表示国际通话)。
2. 创建异常信息表
```
CREATE TABLE abnormal_info (
id INT PRIMARY KEY AUTO_INCREMENT,
call_time DATETIME NOT NULL,
caller_number VARCHAR(20) NOT NULL,
callee_number VARCHAR(20) NOT NULL,
call_duration INT NOT NULL,
call_type INT NOT NULL,
abnormal_type INT NOT NULL
);
```
其中,call_time表示通话时间,caller_number表示主叫号码,callee_number表示被叫号码,call_duration表示通话时长(单位为秒),call_type表示通话类型(0表示国内通话,1表示国际通话),abnormal_type表示异常类型(1表示通话时间过长,2表示同一个号码被拨打次数过多,3表示拨打国际长途次数过多)。
3. 编写定时任务
可以使用MySQL的事件调度功能实现,例如:
```
CREATE EVENT scan_call_record
ON SCHEDULE EVERY 1 HOUR
DO
INSERT INTO abnormal_info(call_time, caller_number, callee_number, call_duration, call_type, abnormal_type)
SELECT call_time, caller_number, callee_number, call_duration, call_type, 1
FROM call_record
WHERE call_type = 1 AND call_duration > 900 AND call_time >= NOW() - INTERVAL 2 HOUR;
INSERT INTO abnormal_info(call_time, caller_number, callee_number, call_duration, call_type, abnormal_type)
SELECT call_time, caller_number, callee_number, call_duration, call_type, 2
FROM (
SELECT callee_number, COUNT(*) AS call_count
FROM call_record
WHERE call_type = 1 AND call_time >= NOW() - INTERVAL 2 HOUR
GROUP BY callee_number
) AS t
WHERE call_count > 5;
INSERT INTO abnormal_info(call_time, caller_number, callee_number, call_duration, call_type, abnormal_type)
SELECT call_time, caller_number, callee_number, call_duration, call_type, 3
FROM (
SELECT caller_number, COUNT(*) AS call_count
FROM call_record
WHERE call_type = 1 AND call_time >= NOW() - INTERVAL 2 HOUR
GROUP BY caller_number
) AS t
WHERE call_count > 10;
```
这个定时任务会在每个小时的开始时刻,扫描前两个小时的话单数据,并将满足异常规则的话单插入到异常信息表中。
4. 查询异常信息
可以使用如下查询语句,将所有异常信息从异常信息表中读取出来:
```
SELECT *
FROM abnormal_info;
```
如果需要按照异常类型进行分类汇总,可以使用如下查询语句:
```
SELECT abnormal_type, COUNT(*) AS abnormal_count
FROM abnormal_info
GROUP BY abnormal_type;
```
这个查询语句会按照异常类型进行分组,并统计每种异常类型的数量。
以上就是我给出的MySQL实现方案,希望能对您有所帮助。