Browse Source

智能质检

田爽 10 months ago
parent
commit
2f4e01b968

+ 4 - 3
src/Hotline.Ai.Jths/AiQualityService.cs

@@ -22,17 +22,18 @@ namespace Hotline.Ai.Jths
 
         }
 
-        public async Task CreateAiOrderQualityTask(Hotline.Quality.Quality model, TrCallRecord? call, Order order, CancellationToken cancellationToken)
+        public async Task CreateAiOrderQualityTask(Hotline.Quality.Quality model, TrCallRecord? call, Order order, string viteRecordPrefix, CancellationToken cancellationToken)
         {
             if (string.IsNullOrEmpty(call?.RecordingFileName)) return;
             var fileName = call.RecordingFileName.Split(".");
             var length = fileName.Count() - 1;
             var recordForm = fileName.Any() && fileName.Length > 1 ? fileName[length] : string.Empty;
-            List<AiQualityDto> datalist = new List<AiQualityDto>();
+            var viteRecordPrefixUrl = new Uri(viteRecordPrefix);
+			List<AiQualityDto> datalist = new List<AiQualityDto>();
             AiQualityDto aiQuality = new AiQualityDto
             {
                 RecordID = model.Id,
-                RecordPath = call.RecordingFileUrl,
+                RecordPath = viteRecordPrefixUrl + call.RecordingAbsolutePath,
                 AgentID = "1001",
                 CallNumber = call.CPN,
                 CallTime = call.CreatedTime.ToString("yyyy-MM-dd HH:mm:ss"),

+ 2 - 1
src/Hotline.Api/Controllers/IPPbxController.cs

@@ -434,7 +434,8 @@ namespace Hotline.Api.Controllers
                 if (teAny)
                 {
                     var quality = await _qualiteyRepository.Queryable().Where(x => x.OrderId == order.Id && x.Source == Share.Enums.Quality.EQualitySource.Accepted).FirstAsync();
-                    await _aiQualityService.CreateAiOrderQualityTask(quality, model, order, HttpContext.RequestAborted);
+                    var setting = _systemSettingCacheManager.GetSetting(SettingConstants.ViteRecordPrefix);
+					await _aiQualityService.CreateAiOrderQualityTask(quality, model, order, setting?.SettingValue[0], HttpContext.RequestAborted);
                 }
             }
             else

+ 7 - 3
src/Hotline.Api/Controllers/QualityController.cs

@@ -25,6 +25,7 @@ using Hotline.Ai.Quality;
 using Newtonsoft.Json;
 using Polly;
 using Hotline.Api.Filter;
+using XF.Domain.Constants;
 
 namespace Hotline.Api.Controllers
 {
@@ -44,6 +45,7 @@ namespace Hotline.Api.Controllers
 		private readonly IOrderRepository _orderRepository;
 		private readonly IAiQualityService _aiQualityService;
 		private readonly ILogger<QualityController> _logger;
+		private readonly ISystemSettingCacheManager _systemSettingCacheManager;
 
 		public QualityController(
 			ISessionContext sessionContext,
@@ -59,8 +61,8 @@ namespace Hotline.Api.Controllers
 			IQualityApplication qualityApplication,
 			IOrderRepository orderRepository,
 			IAiQualityService aiQualityService,
-			ILogger<QualityController> logger
-
+			ILogger<QualityController> logger,
+			ISystemSettingCacheManager systemSettingCacheManager
 		)
 		{
 			_sessionContext = sessionContext;
@@ -77,6 +79,7 @@ namespace Hotline.Api.Controllers
 			_orderRepository = orderRepository;
 			_aiQualityService = aiQualityService;
 			_logger = logger;
+			_systemSettingCacheManager = systemSettingCacheManager;
 		}
 		#region 质检管理
 		/// <summary>
@@ -673,7 +676,8 @@ namespace Hotline.Api.Controllers
 				quality.AiQuality = true;
                 //var call = await _trCallRecordRepository.GetAsync(x => x.CallAccept == order.CallId, HttpContext.RequestAborted); //由CallAccept改为OtherAccept
                 var call = await _trCallRecordRepository.GetAsync(x => x.OtherAccept == order.CallId, HttpContext.RequestAborted);
-                await _aiQualityService.CreateAiOrderQualityTask(quality, call, order, HttpContext.RequestAborted);
+                var setting = _systemSettingCacheManager.GetSetting(SettingConstants.ViteRecordPrefix);
+				await _aiQualityService.CreateAiOrderQualityTask(quality, call, order, setting?.SettingValue[0], HttpContext.RequestAborted);
 				await _qualitey.UpdateAsync(quality, HttpContext.RequestAborted);
 			}
 		}

+ 8 - 3
src/Hotline.Application/Quality/QualityApplication.cs

@@ -1,4 +1,5 @@
 using Hotline.Ai.Quality;
+using Hotline.Caching.Interfaces;
 using Hotline.CallCenter.Calls;
 using Hotline.Orders;
 using Hotline.Quality;
@@ -6,6 +7,7 @@ using Hotline.Share.Dtos.Quality;
 using Hotline.Share.Enums.Quality;
 using MapsterMapper;
 using XF.Domain.Authentications;
+using XF.Domain.Constants;
 using XF.Domain.Dependency;
 using XF.Domain.Exceptions;
 using XF.Domain.Repository;
@@ -22,6 +24,7 @@ namespace Hotline.Application.Quality
         private readonly IOrderRepository _orderRepository;
         private readonly IRepository<TrCallRecord> _trCallRecordRepository;
         private readonly IRepository<QualityTemplate> _qualityTemplate;
+        private readonly ISystemSettingCacheManager _systemSettingCacheManager;
 
 		public QualityApplication(
             ISessionContext sessionContext,
@@ -31,7 +34,8 @@ namespace Hotline.Application.Quality
             IAiQualityService aiQualityService,
             IRepository<TrCallRecord> trCallRecordRepository,
             IRepository<QualityTemplate> qualityTemplate,
-			IOrderRepository orderRepository
+			IOrderRepository orderRepository,
+            ISystemSettingCacheManager systemSettingCacheManager
 		)
         {
             _sessionContext = sessionContext;
@@ -42,7 +46,7 @@ namespace Hotline.Application.Quality
             _trCallRecordRepository = trCallRecordRepository;
             _qualityTemplate = qualityTemplate;
 			_orderRepository = orderRepository;
-
+            _systemSettingCacheManager = systemSettingCacheManager;
 		}
 
         public async Task AddQualityAsync(EQualitySource Source, string OrderId, string VisitId, CancellationToken cancellationToken)
@@ -104,7 +108,8 @@ namespace Hotline.Application.Quality
 			            quality.Mode = "智能质检";
 			            //var call = await _trCallRecordRepository.GetAsync(x => x.CallAccept == order.CallId); //由CallAccept改成OtherAccept
 			            var call = await _trCallRecordRepository.GetAsync(x => x.OtherAccept == order.CallId);
-			            await _aiQualityService.CreateAiOrderQualityTask(quality, call, order, cancellationToken);
+			            var setting = _systemSettingCacheManager.GetSetting(SettingConstants.ViteRecordPrefix);
+						await _aiQualityService.CreateAiOrderQualityTask(quality, call, order, setting?.SettingValue[0], cancellationToken);
 		            }
 	            }
             }

+ 1 - 1
src/Hotline/Ai/Quality/IAiQualityService.cs

@@ -13,6 +13,6 @@ namespace Hotline.Ai.Quality
 {
     public interface IAiQualityService
 	{
-        Task CreateAiOrderQualityTask(Hotline.Quality.Quality model, TrCallRecord? call,Order order, CancellationToken cancellationToken);
+        Task CreateAiOrderQualityTask(Hotline.Quality.Quality model, TrCallRecord? call,Order order, string viteRecordPrefix, CancellationToken cancellationToken);
 	}
 }

+ 12 - 5
src/Hotline/Quality/QualityDomainService.cs

@@ -1,10 +1,12 @@
 using Hotline.Ai.Quality;
+using Hotline.Caching.Interfaces;
 using Hotline.CallCenter.Calls;
 using Hotline.Orders;
 using Hotline.Share.Dtos.Quality;
 using Hotline.Share.Enums.Quality;
 using MapsterMapper;
 using XF.Domain.Authentications;
+using XF.Domain.Constants;
 using XF.Domain.Dependency;
 using XF.Domain.Exceptions;
 using XF.Domain.Repository;
@@ -21,8 +23,9 @@ namespace Hotline.Quality
         private readonly IOrderRepository _orderRepository;
         private readonly IRepository<TrCallRecord> _trCallRecordRepository;
         private readonly IRepository<QualityTemplate> _qualityTemplate;
+        private readonly ISystemSettingCacheManager _systemSettingCacheManager;
 
-        public QualityDomainService(
+		public QualityDomainService(
             ISessionContext sessionContext,
             IMapper mapper,
             IRepository<QualityDetail> qualiteyDetail,
@@ -30,8 +33,9 @@ namespace Hotline.Quality
             IAiQualityService aiQualityService,
             IRepository<TrCallRecord> trCallRecordRepository,
             IRepository<QualityTemplate> qualityTemplate,
-            IOrderRepository orderRepository
-            )
+            IOrderRepository orderRepository,
+            ISystemSettingCacheManager systemSettingCacheManager
+			)
         {
             _sessionContext = sessionContext;
             _mapper = mapper;
@@ -41,7 +45,9 @@ namespace Hotline.Quality
             _trCallRecordRepository = trCallRecordRepository;
             _qualityTemplate = qualityTemplate;
             _orderRepository = orderRepository;
-        }
+            _systemSettingCacheManager = systemSettingCacheManager;
+
+		}
 
         public async Task AddQualityAsync(EQualitySource Source, string OrderId, string VisitId, CancellationToken cancellationToken)
         {
@@ -98,7 +104,8 @@ namespace Hotline.Quality
                         quality.Mode = "智能质检";
                         //var call = await _trCallRecordRepository.GetAsync(x => x.CallAccept == order.CallId); //由CallAccept改成OtherAccept
                         var call = await _trCallRecordRepository.GetAsync(x => x.OtherAccept == order.CallId);
-                        await _aiQualityService.CreateAiOrderQualityTask(quality, call, order, cancellationToken);
+                        var setting = _systemSettingCacheManager.GetSetting(SettingConstants.ViteRecordPrefix);
+						await _aiQualityService.CreateAiOrderQualityTask(quality, call, order, setting?.SettingValue[0],cancellationToken);
                     }
                 }
             }

+ 8 - 3
src/XF.Domain/Constants/SettingConstants.cs

@@ -303,7 +303,12 @@ namespace XF.Domain.Constants
         /// 坐席不满意原因
         /// </summary>
         public const string VisitContentIdTwo = "VisitContentIdTwo";
-        #endregion
-        #endregion
-    }
+		#endregion
+		#endregion
+
+		/// <summary>
+		/// 录音地址前缀
+		/// </summary>
+		public const string ViteRecordPrefix = "ViteRecordPrefix";
+	}
 }