|
@@ -25,6 +25,9 @@ using Hotline.Ai.Quality;
|
|
|
using Newtonsoft.Json;
|
|
|
using Polly;
|
|
|
using Hotline.Api.Filter;
|
|
|
+using Hotline.Application.CallCenter;
|
|
|
+using Hotline.CallCenter.Configs;
|
|
|
+using Microsoft.Extensions.Options;
|
|
|
using XF.Domain.Constants;
|
|
|
|
|
|
namespace Hotline.Api.Controllers
|
|
@@ -46,6 +49,8 @@ namespace Hotline.Api.Controllers
|
|
|
private readonly IAiQualityService _aiQualityService;
|
|
|
private readonly ILogger<QualityController> _logger;
|
|
|
private readonly ISystemSettingCacheManager _systemSettingCacheManager;
|
|
|
+ private readonly ICallApplication _callApplication;
|
|
|
+ private readonly IOptionsSnapshot<CallCenterConfiguration> _callcenterOptions;
|
|
|
|
|
|
public QualityController(
|
|
|
ISessionContext sessionContext,
|
|
@@ -62,8 +67,9 @@ namespace Hotline.Api.Controllers
|
|
|
IOrderRepository orderRepository,
|
|
|
IAiQualityService aiQualityService,
|
|
|
ILogger<QualityController> logger,
|
|
|
- ISystemSettingCacheManager systemSettingCacheManager
|
|
|
- )
|
|
|
+ ISystemSettingCacheManager systemSettingCacheManager,
|
|
|
+ ICallApplication callApplication,
|
|
|
+ IOptionsSnapshot<CallCenterConfiguration> callcenterOptions)
|
|
|
{
|
|
|
_sessionContext = sessionContext;
|
|
|
_mapper = mapper;
|
|
@@ -80,6 +86,8 @@ namespace Hotline.Api.Controllers
|
|
|
_aiQualityService = aiQualityService;
|
|
|
_logger = logger;
|
|
|
_systemSettingCacheManager = systemSettingCacheManager;
|
|
|
+ _callApplication = callApplication;
|
|
|
+ _callcenterOptions = callcenterOptions;
|
|
|
}
|
|
|
#region 质检管理
|
|
|
/// <summary>
|
|
@@ -152,25 +160,72 @@ namespace Hotline.Api.Controllers
|
|
|
.Includes(x => x.QualityDetails)
|
|
|
.FirstAsync(x => x.Id == id);
|
|
|
var qualityDto = _mapper.Map<QualityDto>(quality);
|
|
|
- if (qualityDto.Order != null) {
|
|
|
- //var call = await _trCallRecordRepository.Queryable().Where(x => x.CallAccept == qualityDto.Order.CallId).FirstAsync(); //由CallAccept改为OtherAccept
|
|
|
- var call = await _trCallRecordRepository.Queryable().Where(x => x.OtherAccept == qualityDto.Order.CallId).FirstAsync();
|
|
|
- if (call != null)
|
|
|
- {
|
|
|
- qualityDto.Order.RecordingBaseAddress = call.RecordingBaseAddress;
|
|
|
- qualityDto.Order.RecordingAbsolutePath = call.RecordingAbsolutePath;
|
|
|
- }
|
|
|
+ // if (qualityDto.Order != null) {
|
|
|
+ // //var call = await _trCallRecordRepository.Queryable().Where(x => x.CallAccept == qualityDto.Order.CallId).FirstAsync(); //由CallAccept改为OtherAccept
|
|
|
+ // var call = await _trCallRecordRepository.Queryable().Where(x => x.OtherAccept == qualityDto.Order.CallId).FirstAsync();
|
|
|
+ // if (call != null)
|
|
|
+ // {
|
|
|
+ // qualityDto.Order.RecordingBaseAddress = call.RecordingBaseAddress;
|
|
|
+ // qualityDto.Order.RecordingAbsolutePath = call.RecordingAbsolutePath;
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // if (qualityDto.Visit != null)
|
|
|
+ // {
|
|
|
+ // //var call = await _trCallRecordRepository.Queryable().Where(x => x.CallAccept == qualityDto.Visit.CallId).FirstAsync(); //由CallAccept改为OtherAccept
|
|
|
+ // var call = await _trCallRecordRepository.Queryable().Where(x => x.OtherAccept == qualityDto.Visit.CallId).FirstAsync();
|
|
|
+ // if (call != null)
|
|
|
+ // {
|
|
|
+ // qualityDto.Visit.RecordingBaseAddress = call.RecordingBaseAddress;
|
|
|
+ // qualityDto.Visit.RecordingAbsolutePath = call.RecordingAbsolutePath;
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+
|
|
|
+ if (_callcenterOptions.Value.CallCenterType == AppDefaults.CallCenterType.TianRun)
|
|
|
+ {
|
|
|
+ if (qualityDto.Order != null) {
|
|
|
+ //var call = await _trCallRecordRepository.Queryable().Where(x => x.CallAccept == qualityDto.Order.CallId).FirstAsync(); //由CallAccept改为OtherAccept
|
|
|
+ //var call = await _trCallRecordRepository.Queryable().Where(x => x.OtherAccept == qualityDto.Order.CallId).FirstAsync();
|
|
|
+ var call = await _callApplication.GetTianrunCallAsync(qualityDto.Order.CallId, HttpContext.RequestAborted);
|
|
|
+ if (call != null)
|
|
|
+ {
|
|
|
+ qualityDto.Order.RecordingBaseAddress = call.RecordingBaseAddress;
|
|
|
+ qualityDto.Order.RecordingAbsolutePath = call.RecordingAbsolutePath;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (qualityDto.Visit != null)
|
|
|
+ {
|
|
|
+ //var call = await _trCallRecordRepository.Queryable().Where(x => x.CallAccept == qualityDto.Visit.CallId).FirstAsync(); //由CallAccept改为OtherAccept
|
|
|
+ // var call = await _trCallRecordRepository.Queryable().Where(x => x.OtherAccept == qualityDto.Visit.CallId).FirstAsync();
|
|
|
+ var call = await _callApplication.GetTianrunCallAsync(qualityDto.Visit.CallId, HttpContext.RequestAborted);
|
|
|
+ if (call != null)
|
|
|
+ {
|
|
|
+ qualityDto.Visit.RecordingBaseAddress = call.RecordingBaseAddress;
|
|
|
+ qualityDto.Visit.RecordingAbsolutePath = call.RecordingAbsolutePath;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
- if (qualityDto.Visit != null)
|
|
|
+ else if (_callcenterOptions.Value.CallCenterType == AppDefaults.CallCenterType.XingTang)
|
|
|
{
|
|
|
- //var call = await _trCallRecordRepository.Queryable().Where(x => x.CallAccept == qualityDto.Visit.CallId).FirstAsync(); //由CallAccept改为OtherAccept
|
|
|
- var call = await _trCallRecordRepository.Queryable().Where(x => x.OtherAccept == qualityDto.Visit.CallId).FirstAsync();
|
|
|
- if (call != null)
|
|
|
- {
|
|
|
- qualityDto.Visit.RecordingBaseAddress = call.RecordingBaseAddress;
|
|
|
- qualityDto.Visit.RecordingAbsolutePath = call.RecordingAbsolutePath;
|
|
|
- }
|
|
|
- }
|
|
|
+ if (!string.IsNullOrEmpty(qualityDto?.Order?.CallId))
|
|
|
+ {
|
|
|
+ var call = await _callApplication.GetCallAsync(qualityDto.Order.CallId, HttpContext.RequestAborted);
|
|
|
+ if (call != null)
|
|
|
+ {
|
|
|
+ qualityDto.Order.RecordingBaseAddress = call.AudioFile;
|
|
|
+ qualityDto.Order.RecordingAbsolutePath = call.AudioFile;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!string.IsNullOrEmpty(qualityDto.Visit.CallId))
|
|
|
+ {
|
|
|
+ var call = await _callApplication.GetCallAsync(qualityDto.Visit.CallId, HttpContext.RequestAborted);
|
|
|
+ if (call != null)
|
|
|
+ {
|
|
|
+ qualityDto.Visit.RecordingBaseAddress = call.AudioFile;
|
|
|
+ qualityDto.Visit.RecordingAbsolutePath = call.AudioFile;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
return qualityDto;
|
|
|
}
|
|
|
#endregion
|