Bläddra i källkod

通话记录敏感词

Dun.Jason 6 månader sedan
förälder
incheckning
04fc670e25

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

@@ -40,6 +40,7 @@ using Hotline.Quality.Notifications;
 using Hotline.Share.Dtos.Quality;
 using MongoDB.Driver;
 using Hotline.Repository.SqlSugar.CallCenter;
+using SqlSugar;
 
 namespace Hotline.Api.Controllers
 {
@@ -708,7 +709,8 @@ namespace Hotline.Api.Controllers
                 .WhereIF(!string.IsNullOrEmpty(dto.OrderNo), x => x.Order.No.Contains(dto.OrderNo))
                 .WhereIF(!string.IsNullOrEmpty(dto.Title), x => x.Order.Title.Contains(dto.Title))
                 .WhereIF(!string.IsNullOrEmpty(dto.Gateway), x => x.Gateway.Contains(dto.Gateway))
-                
+                .WhereIF(dto.IsSensitiveWord.HasValue && dto.IsSensitiveWord == true, d => d.Sensitive != null && SqlFunc.JsonArrayLength(d.Sensitive) > 0)
+                .WhereIF(!string.IsNullOrEmpty(dto.SensitiveWord), d => SqlFunc.JsonArrayAny(d.Sensitive, dto.SensitiveWord))
                 .WhereIF(dto.IsAiAnswered == true,x=>string.IsNullOrEmpty(x.UserId) == true && x.BeginIvrTime.HasValue && x.EndIvrTime.HasValue)
 
                 .WhereIF(dto.PhoneTypes!=null,x=>x.PhoneTypes == dto.PhoneTypes)

+ 24 - 4
src/Hotline.Application/Quality/QualityApplication.cs

@@ -26,6 +26,7 @@ using XF.Domain.Exceptions;
 using XF.Domain.Repository;
 using Hotline.Share.Enums.CallCenter;
 using Hotline.Configurations;
+using Hotline.Tools;
 
 namespace Hotline.Application.Quality
 {
@@ -43,8 +44,9 @@ namespace Hotline.Application.Quality
         private readonly IOptionsSnapshot<AppConfiguration> _appOptions;
         private readonly Publisher _publisher;
         private readonly IRepository<TrCallRecord> _trCallRecordRepository;
+        private readonly IRepository<OrderWord> _orderWordRepository;
 
-		public QualityApplication(
+        public QualityApplication(
             ISessionContext sessionContext,
             IMapper mapper,
             IRepository<QualityDetail> qualiteyDetail,
@@ -56,7 +58,8 @@ namespace Hotline.Application.Quality
             IOptionsSnapshot<AppConfiguration> appOptions,
             ILogger<Hotline.Quality.Quality> logger,
             Publisher publisher,
-            IRepository<TrCallRecord> trCallRecordRepository)
+            IRepository<TrCallRecord> trCallRecordRepository,
+            IRepository<OrderWord> orderWordRepository)
         {
             _sessionContext = sessionContext;
             _mapper = mapper;
@@ -70,7 +73,8 @@ namespace Hotline.Application.Quality
             _logger = logger;
             _publisher = publisher;
             _trCallRecordRepository = trCallRecordRepository;
-		}
+            _orderWordRepository = orderWordRepository;
+        }
 
         /// <summary>
         /// 新增质检
@@ -342,7 +346,23 @@ namespace Hotline.Application.Quality
 				}
                 transliterationContent = transliterationContent.Length > 7500 ? transliterationContent.Substring(0, 7500) : transliterationContent;
 				var state = !string.IsNullOrEmpty(transliterationContent)? ECallTransliterationState.Succeed : ECallTransliterationState.Fail;
-				await _trCallRecordRepository.Updateable().SetColumns(o => new TrCallRecord { TransliterationState = state, TransliterationContent = transliterationContent })
+                List<string>? intersect = new List<string>();
+                //处理敏感词
+                if (!string.IsNullOrEmpty(transliterationContent))
+                {
+                    try
+                    {
+                        var words = await _orderWordRepository.Queryable().Where(x => x.IsEnable == 1 && x.Classify.Contains("敏感标签")).Select(x => x.Tag).ToListAsync(cancellationToken);
+                        var res = new List<string>();
+                        if (words.Any()) res = ParticipleTool.SegMMDouble(transliterationContent, ref words);
+                        if (res.Any())
+                        {
+                            intersect = words.Intersect(res).ToList();
+                        }
+                    }
+                    catch { }
+                }
+				await _trCallRecordRepository.Updateable().SetColumns(o => new TrCallRecord { TransliterationState = state, TransliterationContent = transliterationContent, Sensitive = intersect })
 					.Where(o => o.Id == call.Id).ExecuteCommandAsync(cancellationToken);
 			}
 		}

+ 9 - 0
src/Hotline.Share/Dtos/TrCallCenter/TrTelDao.cs

@@ -567,6 +567,15 @@ namespace Hotline.Share.Dtos.TrCallCenter
         /// </summary>
         public EPhoneTypes? PhoneTypes { get; set; }
 
+        /// <summary>
+        /// 是否敏感词
+        /// </summary>
+        public bool? IsSensitiveWord { get; set; }
+
+        /// <summary>
+        /// 敏感词
+        /// </summary>
+        public string? SensitiveWord { get; set; }
     }
 
 

+ 8 - 2
src/Hotline/CallCenter/Calls/TrCallRecord.cs

@@ -208,7 +208,13 @@ namespace Hotline.CallCenter.Calls
         public string? TransliterationId { get; set; }
 
         public void InitTransliterationId() => TransliterationId = SequentialStringGenerator.Create();
-		#endregion
 
-	}
+        /// <summary>
+        /// 敏感标签
+        /// </summary>
+        [SugarColumn(ColumnDataType = "json", IsJson = true, IsNullable = true, ColumnDescription = "敏感标签")]
+        public List<string>? Sensitive { get; set; }
+        #endregion
+
+    }
 }