|
@@ -27,6 +27,11 @@ using XF.Domain.Repository;
|
|
|
using Hotline.Share.Enums.CallCenter;
|
|
|
using Hotline.Configurations;
|
|
|
using Hotline.Tools;
|
|
|
+using Hotline.Share.Dtos;
|
|
|
+using MathNet.Numerics;
|
|
|
+using Microsoft.Extensions.DependencyInjection;
|
|
|
+using NPOI.HPSF;
|
|
|
+using System.Threading;
|
|
|
|
|
|
namespace Hotline.Application.Quality
|
|
|
{
|
|
@@ -45,8 +50,10 @@ namespace Hotline.Application.Quality
|
|
|
private readonly Publisher _publisher;
|
|
|
private readonly IRepository<TrCallRecord> _trCallRecordRepository;
|
|
|
private readonly IRepository<OrderWord> _orderWordRepository;
|
|
|
+ private readonly IServiceProvider _serviceProvider;
|
|
|
+ private readonly IRepository<QualityItem> _qualiteyItem;
|
|
|
|
|
|
- public QualityApplication(
|
|
|
+ public QualityApplication(
|
|
|
ISessionContext sessionContext,
|
|
|
IMapper mapper,
|
|
|
IRepository<QualityDetail> qualiteyDetail,
|
|
@@ -59,7 +66,9 @@ namespace Hotline.Application.Quality
|
|
|
ILogger<Hotline.Quality.Quality> logger,
|
|
|
Publisher publisher,
|
|
|
IRepository<TrCallRecord> trCallRecordRepository,
|
|
|
- IRepository<OrderWord> orderWordRepository)
|
|
|
+ IServiceProvider serviceProvider,
|
|
|
+ IRepository<QualityItem> qualiteyItem,
|
|
|
+ IRepository<OrderWord> orderWordRepository)
|
|
|
{
|
|
|
_sessionContext = sessionContext;
|
|
|
_mapper = mapper;
|
|
@@ -74,7 +83,9 @@ namespace Hotline.Application.Quality
|
|
|
_publisher = publisher;
|
|
|
_trCallRecordRepository = trCallRecordRepository;
|
|
|
_orderWordRepository = orderWordRepository;
|
|
|
- }
|
|
|
+ _serviceProvider = serviceProvider;
|
|
|
+ _qualiteyItem = qualiteyItem;
|
|
|
+ }
|
|
|
|
|
|
/// <summary>
|
|
|
/// 新增质检
|
|
@@ -369,6 +380,73 @@ namespace Hotline.Application.Quality
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 智能质检转写_兴唐
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <param name="cancellationToken"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ public async Task AiResult_XT(List<AiQualityXTDto> dto, CancellationToken cancellationToken)
|
|
|
+ {
|
|
|
+ foreach (var item in dto)
|
|
|
+ {
|
|
|
+ var quality = await _qualityRepository.Queryable().Includes(x => x.Order).Where(x => x.Id == item.Id).FirstAsync();
|
|
|
+ var call = await _callApplication.GetCallAsync(quality.Order.CallId, cancellationToken);
|
|
|
+ var qualityItems = await _qualiteyItem.Queryable().Where(x => x.IsEnable == 0 && x.IsDeleted == true && x.IsIntelligent == 1).ToListAsync();
|
|
|
+ await _qualityRepository.Updateable().SetColumns(x => new Hotline.Quality.Quality { TransferState = EQualityTransferState.Translating }).Where(x=>x.Id == quality.Id).ExecuteCommandAsync();
|
|
|
+ Transfer_XT(quality, call, qualityItems, cancellationToken);
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 异步转写
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="quality"></param>
|
|
|
+ /// <param name="call"></param>
|
|
|
+ /// <param name="items"></param>
|
|
|
+ /// <param name="cancellationToken"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ public async Task Transfer_XT(Hotline.Quality.Quality quality,CallNative call ,List<QualityItem> items, CancellationToken cancellationToken) {
|
|
|
+ var transfers = new List<Transfer>();
|
|
|
+ if (!string.IsNullOrEmpty(call?.AudioFile))
|
|
|
+ {
|
|
|
+ var filename = Path.GetFileName(call.AudioFile);
|
|
|
+ try
|
|
|
+ {
|
|
|
+ var aiQualityService = _serviceProvider.GetRequiredService<IAiQualityService>();
|
|
|
+ var res = await aiQualityService.CreateAiOrderQualityTask(filename, cancellationToken);
|
|
|
+ if (!string.IsNullOrEmpty(res))
|
|
|
+ {
|
|
|
+ var rowList = res.Split("\n");
|
|
|
+ var sort = 0;
|
|
|
+ foreach (var row in rowList)
|
|
|
+ {
|
|
|
+ var model = new Transfer();
|
|
|
+ var statement = row.Split(":");
|
|
|
+ if (statement.Count() == 2)
|
|
|
+ {
|
|
|
+ model.Sort = sort;
|
|
|
+ model.Type = statement[0].ToString() == "spk_01" ? EQualityTransferType.Seats : EQualityTransferType.Citizen;
|
|
|
+ model.Content = statement[1].ToString();
|
|
|
+ model.ReviseContent = model.Content;
|
|
|
+ if (!string.IsNullOrEmpty(model.Content))
|
|
|
+ {
|
|
|
+ var hitWord = items.Where(x => model.Content.Contains(x.Name)).ToList();
|
|
|
+ model.Prohibited = string.Join(";", hitWord);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ transfers.Add(model);
|
|
|
+ sort++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ await _qualityRepository.Updateable().SetColumns(x => new Hotline.Quality.Quality { TransferState = EQualityTransferState.Succeed,Transfer = transfers }).Where(x => x.Id == quality.Id).ExecuteCommandAsync();
|
|
|
+ }
|
|
|
+ catch (Exception)
|
|
|
+ {
|
|
|
+ await _qualityRepository.Updateable().SetColumns(x => new Hotline.Quality.Quality { TransferState = EQualityTransferState.Lose}).Where(x => x.Id == quality.Id).ExecuteCommandAsync();
|
|
|
+ throw;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|