|
@@ -23,101 +23,105 @@ namespace CallCenter.CacheManager
|
|
|
|
|
|
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
|
|
|
{
|
|
|
- using var sc = _serviceScopeFactory.CreateScope();
|
|
|
- var _logger = sc.ServiceProvider.GetService<ILogger<CallRecordManager>>();
|
|
|
- var time = TimeSpan.FromMinutes(1);
|
|
|
- //await Task.Delay(time, stoppingToken);
|
|
|
- while(!stoppingToken.IsCancellationRequested)
|
|
|
+ var _recordSettings = _serviceScopeFactory.CreateScope().ServiceProvider.GetRequiredService<IOptionsSnapshot<RecordSettings>>();
|
|
|
+ if (_recordSettings.Value.IsDown)
|
|
|
{
|
|
|
- using var scope = _serviceScopeFactory.CreateScope();
|
|
|
- var _callRecordRepository = scope.ServiceProvider.GetService<ICallRecordRepository>();
|
|
|
- //var _recordSettings = scope.ServiceProvider.GetConfigValue<RecordSettings>();
|
|
|
- var _recordSettings = _serviceScopeFactory.CreateScope().ServiceProvider.GetRequiredService<IOptionsSnapshot<RecordSettings>>();
|
|
|
- //TODO 查询所有没有下载语音文件的记录
|
|
|
- var canDown = await _callRecordRepository!.GetCanDownVoice(stoppingToken);
|
|
|
-
|
|
|
- if (canDown != null)
|
|
|
+ using var sc = _serviceScopeFactory.CreateScope();
|
|
|
+ var _logger = sc.ServiceProvider.GetService<ILogger<CallRecordManager>>();
|
|
|
+ var time = TimeSpan.FromMinutes(1);
|
|
|
+ //await Task.Delay(time, stoppingToken);
|
|
|
+ while (!stoppingToken.IsCancellationRequested)
|
|
|
{
|
|
|
- _logger.LogInformation(canDown.Recording);
|
|
|
- //TODO 下载语音文件
|
|
|
+ using var scope = _serviceScopeFactory.CreateScope();
|
|
|
+ var _callRecordRepository = scope.ServiceProvider.GetService<ICallRecordRepository>();
|
|
|
+ //var _recordSettings = scope.ServiceProvider.GetConfigValue<RecordSettings>();
|
|
|
+
|
|
|
+ //TODO 查询所有没有下载语音文件的记录
|
|
|
+ var canDown = await _callRecordRepository!.GetCanDownVoice(stoppingToken);
|
|
|
|
|
|
- //分隔数据
|
|
|
- if (!string.IsNullOrEmpty(canDown.Recording))
|
|
|
+ if (canDown != null)
|
|
|
{
|
|
|
- string dir = canDown.Recording.Split("/")[0];
|
|
|
- string filename = canDown.Recording.Split("/")[1];
|
|
|
- //string url = "";
|
|
|
- string url = _recordSettings.Value.Remote + canDown.Recording;//远程地址
|
|
|
- string localfile = "Recorder/" + dir + "/"; //本地地址
|
|
|
- long startPosition = 0;//上次下载的文件起始位置
|
|
|
- FileStream writeStream;//写入本地文件流对象
|
|
|
- if (File.Exists(localfile+filename))
|
|
|
- {
|
|
|
- writeStream = File.OpenWrite(localfile + filename);
|
|
|
- startPosition = writeStream.Length; //获取已经下载的长度
|
|
|
- writeStream.Seek(startPosition, SeekOrigin.Current);//本地文件写入位置定位
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- if (!File.Exists(localfile))
|
|
|
- {
|
|
|
- System.IO.Directory.CreateDirectory(localfile);
|
|
|
- }
|
|
|
- writeStream = new FileStream(localfile + filename, FileMode.Create);//保存
|
|
|
- startPosition = 0;
|
|
|
- }
|
|
|
+ _logger.LogInformation(canDown.Recording);
|
|
|
+ //TODO 下载语音文件
|
|
|
|
|
|
- try
|
|
|
+ //分隔数据
|
|
|
+ if (!string.IsNullOrEmpty(canDown.Recording))
|
|
|
{
|
|
|
- HttpWebRequest myRequest = (HttpWebRequest)HttpWebRequest.Create(url);// 打开网络连接
|
|
|
- myRequest.Timeout = 600;//10分钟超时
|
|
|
- if (startPosition>0)
|
|
|
+ string dir = canDown.Recording.Split("/")[0];
|
|
|
+ string filename = canDown.Recording.Split("/")[1];
|
|
|
+ //string url = "";
|
|
|
+ string url = _recordSettings.Value.Remote + canDown.Recording;//远程地址
|
|
|
+ string localfile = "Recorder/" + dir + "/"; //本地地址
|
|
|
+ long startPosition = 0;//上次下载的文件起始位置
|
|
|
+ FileStream writeStream;//写入本地文件流对象
|
|
|
+ if (File.Exists(localfile + filename))
|
|
|
{
|
|
|
- myRequest.AddRange((int)startPosition); //设置Range值,与上面的writeStream.Seek用意相同,是为了定义远程文件读取位置
|
|
|
+ writeStream = File.OpenWrite(localfile + filename);
|
|
|
+ startPosition = writeStream.Length; //获取已经下载的长度
|
|
|
+ writeStream.Seek(startPosition, SeekOrigin.Current);//本地文件写入位置定位
|
|
|
}
|
|
|
- Stream readStream = myRequest.GetResponse().GetResponseStream();// 向服务器请求,获得服务器的回应数据流
|
|
|
- if (readStream.CanRead)
|
|
|
+ else
|
|
|
{
|
|
|
- _logger.LogInformation("读取设备");
|
|
|
- byte[] btArray = new byte[512];// 定义一个字节数据,用来向readStream读取内容和向writeStream写入内容
|
|
|
- int contentSize = readStream.Read(btArray, 0, btArray.Length);// 向远程文件读第一次
|
|
|
+ if (!File.Exists(localfile))
|
|
|
+ {
|
|
|
+ System.IO.Directory.CreateDirectory(localfile);
|
|
|
+ }
|
|
|
+ writeStream = new FileStream(localfile + filename, FileMode.Create);//保存
|
|
|
+ startPosition = 0;
|
|
|
+ }
|
|
|
|
|
|
- while (contentSize > 0)// 如果读取长度大于零则继续读
|
|
|
+ try
|
|
|
+ {
|
|
|
+ HttpWebRequest myRequest = (HttpWebRequest)HttpWebRequest.Create(url);// 打开网络连接
|
|
|
+ myRequest.Timeout = 600;//10分钟超时
|
|
|
+ if (startPosition > 0)
|
|
|
{
|
|
|
- writeStream.Write(btArray, 0, contentSize);// 写入本地文件
|
|
|
- contentSize = readStream.Read(btArray, 0, btArray.Length);// 继续向远程文件读取
|
|
|
+ myRequest.AddRange((int)startPosition); //设置Range值,与上面的writeStream.Seek用意相同,是为了定义远程文件读取位置
|
|
|
}
|
|
|
+ Stream readStream = myRequest.GetResponse().GetResponseStream();// 向服务器请求,获得服务器的回应数据流
|
|
|
+ if (readStream.CanRead)
|
|
|
+ {
|
|
|
+ _logger.LogInformation("读取设备");
|
|
|
+ byte[] btArray = new byte[512];// 定义一个字节数据,用来向readStream读取内容和向writeStream写入内容
|
|
|
+ int contentSize = readStream.Read(btArray, 0, btArray.Length);// 向远程文件读第一次
|
|
|
|
|
|
- //关闭流
|
|
|
- writeStream.Close();
|
|
|
- readStream.Close();
|
|
|
+ while (contentSize > 0)// 如果读取长度大于零则继续读
|
|
|
+ {
|
|
|
+ writeStream.Write(btArray, 0, contentSize);// 写入本地文件
|
|
|
+ contentSize = readStream.Read(btArray, 0, btArray.Length);// 继续向远程文件读取
|
|
|
+ }
|
|
|
|
|
|
- //成功 修改状态
|
|
|
- canDown.IsDown = true;
|
|
|
- canDown.DownRemark = "下载成功(200)";
|
|
|
- await _callRecordRepository.UpdateAsync(canDown);
|
|
|
+ //关闭流
|
|
|
+ writeStream.Close();
|
|
|
+ readStream.Close();
|
|
|
+
|
|
|
+ //成功 修改状态
|
|
|
+ canDown.IsDown = true;
|
|
|
+ canDown.DownRemark = "下载成功(200)";
|
|
|
+ await _callRecordRepository.UpdateAsync(canDown);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ canDown.IsDown = true;
|
|
|
+ canDown.DownRemark = "无法读取(500)";
|
|
|
+ await _callRecordRepository.UpdateAsync(canDown);
|
|
|
+ }
|
|
|
}
|
|
|
- else
|
|
|
+ catch (Exception ex)
|
|
|
{
|
|
|
+ _logger.LogInformation(ex.Message);
|
|
|
canDown.IsDown = true;
|
|
|
- canDown.DownRemark = "无法读取(500)";
|
|
|
+ canDown.DownRemark = "未找到文件(404)";
|
|
|
await _callRecordRepository.UpdateAsync(canDown);
|
|
|
+ writeStream.Close();
|
|
|
+ await Task.Delay(time, stoppingToken);
|
|
|
}
|
|
|
}
|
|
|
- catch(Exception ex)
|
|
|
- {
|
|
|
- _logger.LogInformation(ex.Message);
|
|
|
- canDown.IsDown = true;
|
|
|
- canDown.DownRemark = "未找到文件(404)";
|
|
|
- await _callRecordRepository.UpdateAsync(canDown);
|
|
|
- writeStream.Close();
|
|
|
- await Task.Delay(time, stoppingToken);
|
|
|
- }
|
|
|
}
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- await Task.Delay(time, stoppingToken);
|
|
|
+ else
|
|
|
+ {
|
|
|
+ await Task.Delay(time, stoppingToken);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|