소스 검색

智能质检转写_兴唐

田爽 3 달 전
부모
커밋
7139e5bb38

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

@@ -23,6 +23,7 @@ using Microsoft.Extensions.Options;
 using Hotline.Configurations;
 using Hotline.CallCenter.Calls;
 using System.Linq;
+using Hotline.Repository.SqlSugar.Quality;
 
 namespace Hotline.Api.Controllers
 {
@@ -49,8 +50,9 @@ namespace Hotline.Api.Controllers
         private readonly ICallApplication _callApplication;
         private readonly IOptionsSnapshot<AppConfiguration> _appOptions;
         private readonly IRepository<SystemLog> _logRepository;
+		private readonly IRepository<QualityTransferRecords> _qualityTransferRecordsRepository;
 
-        public QualityController(
+		public QualityController(
             ISessionContext sessionContext,
             IMapper mapper,
             IQualityRepository qualitey,
@@ -69,7 +71,8 @@ namespace Hotline.Api.Controllers
             ISystemSettingCacheManager systemSettingCacheManager,
             ICallApplication callApplication,
             IOptionsSnapshot<AppConfiguration> appOptions,
-            IRepository<SystemLog> logRepository)
+            IRepository<SystemLog> logRepository,
+			IRepository<QualityTransferRecords> qualityTransferRecordsRepository)
         {
             _sessionContext = sessionContext;
             _mapper = mapper;
@@ -90,7 +93,8 @@ namespace Hotline.Api.Controllers
             _callApplication = callApplication;
             _appOptions = appOptions;
             _logRepository = logRepository;
-        }
+            _qualityTransferRecordsRepository = qualityTransferRecordsRepository;
+		}
         #region 质检管理
         /// <summary>
         /// 删除质检
@@ -613,17 +617,57 @@ namespace Hotline.Api.Controllers
             return rsp;
         }
 
+		/// <summary>
+		/// 智能质检转写_兴唐
+		/// </summary>
+		/// <param name="dto"></param>
+		/// <returns></returns>
+		[HttpPost("aitransfer_xt")]
+		[LogFilter("智能质检转写_兴唐")]
+		public async Task AiTransfer_XT([FromBody] List<AiQualityXTDto> dto)
+		{
+			var transfers = new List<QualityTransferRecords>();
+			foreach (var item in dto)
+			{
+                var records =  await _qualityTransferRecordsRepository.Queryable().Where(x=>x.QualityId == item.Id  &&  x.IsFinished == false).AnyAsync();
+                if (records)
+                    continue;
+
+				var transfer = new QualityTransferRecords();
+				transfer.QualityId = item.Id;
+				transfer.IsFinished = false;
+				transfer.TransferState = EQualityTransferState.NotStarted;
+				transfers.Add(transfer);
+				await _qualitey.Updateable().SetColumns(x => new Hotline.Quality.Quality { TransferState = EQualityTransferState.Translating }).Where(x => x.Id == item.Id).ExecuteCommandAsync();
+			}
+			await _qualityTransferRecordsRepository.AddRangeAsync(transfers);
+		}
+
 		/// <summary>
 		/// 智能质检转写
 		/// </summary>
 		/// <param name="dto"></param>
 		/// <returns></returns>
 		[AllowAnonymous]
-		[HttpPost("AiResult_XT")]
-		[LogFilter("智能质检转写_兴唐")]
-		public async Task AiResult_XT([FromBody] List<AiQualityXTDto> dto)
+		[HttpPost("transfer")]
+		[LogFilter("智能质检转写_兴唐_定时调用")]
+		public async Task AiTransfer_XT()
 		{
-            await _qualityApplication.AiResult_XT(dto, HttpContext.RequestAborted);
+            var translatings = await _qualityTransferRecordsRepository.Queryable().Where(x => x.IsFinished == false && x.TransferState == EQualityTransferState.Translating).OrderBy(x => x.TransferTime).ToListAsync();
+            if (translatings.Any())
+            {
+                var transfer = translatings.FirstOrDefault();
+                if ((DateTime.Now - transfer.TransferTime.Value).TotalMinutes >= 30)
+                {
+                    await _qualityTransferRecordsRepository.Updateable().SetColumns(x => new QualityTransferRecords { TransferState = EQualityTransferState.Lose }).Where(x => x.Id == transfer.Id).ExecuteCommandAsync();
+                }
+                return;
+            }
+            else {
+				var notStarted = await _qualityTransferRecordsRepository.Queryable().Where(x => x.IsFinished == false && x.TransferState == EQualityTransferState.NotStarted).OrderBy(x => x.TransferTime).FirstAsync();
+				await _qualityTransferRecordsRepository.Updateable().SetColumns(x => new QualityTransferRecords { TransferState = EQualityTransferState.Translating , TransferTime = DateTime.Now }).Where(x => x.Id == notStarted.Id).ExecuteCommandAsync();
+				_qualityApplication.Transfer_XT(notStarted.QualityId, HttpContext.RequestAborted);
+			}
 		}
 
 

+ 1 - 1
src/Hotline.Application/Quality/IQualityApplication.cs

@@ -11,7 +11,7 @@ namespace Hotline.Application.Quality
 		Task UpdateQualityAsync(UpdateQualityDto model, CancellationToken cancellationToken);
 		Task AiResultAsync(List<AiQualityResultDto> model, CancellationToken cancellationToken);
 
-		Task AiResult_XT(List<AiQualityXTDto> dto, CancellationToken cancellationToken);
+		Task Transfer_XT(string Id, CancellationToken cancellationToken);
 
 	}
 }

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

@@ -52,6 +52,7 @@ namespace Hotline.Application.Quality
         private readonly IRepository<OrderWord> _orderWordRepository;
 		private readonly IServiceProvider _serviceProvider;
 		private readonly IRepository<QualityItem> _qualiteyItem;
+		private readonly IRepository<QualityTransferRecords> _qualityTransferRecordsRepository;
 
 		public QualityApplication(
             ISessionContext sessionContext,
@@ -68,7 +69,8 @@ namespace Hotline.Application.Quality
             IRepository<TrCallRecord> trCallRecordRepository,
 			IServiceProvider serviceProvider,
 			IRepository<QualityItem> qualiteyItem,
-			IRepository<OrderWord> orderWordRepository)
+			IRepository<OrderWord> orderWordRepository,
+			IRepository<QualityTransferRecords> qualityTransferRecordsRepository)
         {
             _sessionContext = sessionContext;
             _mapper = mapper;
@@ -85,6 +87,7 @@ namespace Hotline.Application.Quality
             _orderWordRepository = orderWordRepository;
             _serviceProvider = serviceProvider;
 			_qualiteyItem = qualiteyItem;
+            _qualityTransferRecordsRepository = qualityTransferRecordsRepository;
 		}
 
         /// <summary>
@@ -380,33 +383,16 @@ 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) {
+        public async Task Transfer_XT(string Id, CancellationToken cancellationToken) {
+
+			var quality = await _qualityRepository.Queryable().Includes(x => x.Order).Where(x => x.Id == Id).FirstAsync();
+			var call = await _callApplication.GetCallAsync(quality.Order.CallId, cancellationToken);
+			var items = await _qualiteyItem.Queryable().Where(x => x.IsEnable == 0 && x.IsDeleted == true && x.IsIntelligent == 1).ToListAsync();
+
 			var transfers = new List<Transfer>();
 			if (!string.IsNullOrEmpty(call?.AudioFile))
 			{
@@ -440,10 +426,12 @@ namespace Hotline.Application.Quality
 						}
 					}
 					await _qualityRepository.Updateable().SetColumns(x => new Hotline.Quality.Quality { TransferState = EQualityTransferState.Succeed,Transfer = transfers }).Where(x => x.Id == quality.Id).ExecuteCommandAsync();
+					await _qualityTransferRecordsRepository.Updateable().SetColumns(x => new QualityTransferRecords { TransferState = EQualityTransferState.Succeed,IsFinished = true }).Where(x => x.QualityId == quality.Id).ExecuteCommandAsync();
 				}
 				catch (Exception)
 				{
 					await _qualityRepository.Updateable().SetColumns(x => new Hotline.Quality.Quality { TransferState = EQualityTransferState.Lose}).Where(x => x.Id == quality.Id).ExecuteCommandAsync();
+					await _qualityTransferRecordsRepository.Updateable().SetColumns(x => new QualityTransferRecords { TransferState = EQualityTransferState.Lose, IsFinished = true }).Where(x => x.QualityId == quality.Id).ExecuteCommandAsync();
 					throw;
 				}
 			}

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

@@ -15,7 +15,7 @@ namespace Hotline.Quality
 	[Description("质检")]
 	[SugarIndex("index_quality_creationtime", nameof(Quality.CreationTime), OrderByType.Desc)]
 	[SugarIndex("index_quality_orderId", nameof(OrderScreen.OrderId), OrderByType.Asc)]
-	[SugarIndex("index_quality_orderId", nameof(OrderScreen.VisitId), OrderByType.Asc)]
+	[SugarIndex("index_quality_visitId", nameof(OrderScreen.VisitId), OrderByType.Asc)]
 	public class Quality : FullStateEntity
 	{
 		/// <summary>

+ 40 - 0
src/Hotline/Quality/QualityTransferRecords.cs

@@ -0,0 +1,40 @@
+using Hotline.Share.Enums.Quality;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using XF.Domain.Repository;
+
+namespace Hotline.Quality
+{
+	[Description("录音文件质检转写")]
+	public class QualityTransferRecords : FullStateEntity
+	{
+
+		/// <summary>
+		/// 质检ID
+		/// </summary>
+		public string QualityId { get; set; }
+
+
+		/// <summary>
+		/// 是否完成
+		/// </summary>
+		public bool? IsFinished { get; set; }
+
+		/// <summary>
+		/// 转写时间
+		/// </summary>
+		public DateTime? TransferTime { get; set; }
+
+
+		/// <summary>
+		/// 转写状态
+		/// </summary>
+		[SugarColumn(ColumnDescription = "转写状态", DefaultValue = "0")]
+		public EQualityTransferState? TransferState { get; set; }
+	}
+}