Эх сурвалжийг харах

Merge branch 'feature_batchoutcall_dss' of Fengwo/hotline into dev

dengshengshuang 10 сар өмнө
parent
commit
76807d0149

+ 98 - 2
src/Hotline.Api/Controllers/AiController.cs

@@ -347,11 +347,10 @@ namespace Hotline.Api.Controllers
         {
             switch (request.TypeId)
             {
-                //待处理子表
                 case 1:
                     var aiVisit = await _aiOrderVisitRepository.Queryable()
                         .Includes(x => x.AiOrderVisitDetails,s=>s.OrderVisit)
-                        .FirstAsync(x => x.Id == request.Id);
+                        .FirstAsync(x => x.Id == request.Id,HttpContext.RequestAborted);
                     if (aiVisit!=null && !string.IsNullOrEmpty(aiVisit.BatchUid))
                     {
                         if (aiVisit.TaskState != EAiOrderVisitTaskState.NoStarted || aiVisit.TaskState != EAiOrderVisitTaskState.InProgress)
@@ -406,6 +405,103 @@ namespace Hotline.Api.Controllers
             }
         }
 
+        /// <summary>
+        /// 暂停外呼任务
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        [HttpPost("callout/pausecallouttask")]
+        public async Task PauseCalloutTask([FromBody] CloseCalloutTaskReq request)
+        {
+            switch (request.TypeId)
+            {
+                case 1:
+                    var aiVisit = await _aiOrderVisitRepository.Queryable()
+                        .FirstAsync(x => x.Id == request.Id,HttpContext.RequestAborted);
+                    if (aiVisit != null && !string.IsNullOrEmpty(aiVisit.BatchUid))
+                    {
+                        if (aiVisit.TaskState != EAiOrderVisitTaskState.NoStarted || aiVisit.TaskState != EAiOrderVisitTaskState.InProgress)
+                            throw UserFriendlyException.SameMessage("当前状态不能终止");
+
+                        bool isOk = await _aiVisitService.ChangeStatusAsync(aiVisit.BatchUid, "stop", HttpContext.RequestAborted);
+
+                        if (!isOk)
+                            throw UserFriendlyException.SameMessage("终止失败");
+
+                        aiVisit.TaskState = EAiOrderVisitTaskState.Pause;
+                        await _aiOrderVisitRepository.UpdateAsync(aiVisit, HttpContext.RequestAborted);
+                    }
+                    break;
+                case 2:
+                    var callOut = await _callOutTaskRepository.Queryable()
+                       .FirstAsync(x => x.Id == request.Id);
+                    if (callOut != null && !string.IsNullOrEmpty(callOut.BatchUid))
+                    {
+                        if (callOut.AiCallOutTaskState != EAiCallOutTaskState.NoStarted || callOut.AiCallOutTaskState != EAiCallOutTaskState.InProgress)
+                            throw UserFriendlyException.SameMessage("当前状态不能终止");
+
+                        bool isOk = await _aiVisitService.ChangeStatusAsync(callOut.BatchUid, "stop", HttpContext.RequestAborted);
+
+                        if (!isOk)
+                            throw UserFriendlyException.SameMessage("终止失败");
+                        //处理业务数据
+                        callOut.AiCallOutTaskState = EAiCallOutTaskState.Pause;
+                        await _callOutTaskRepository.UpdateAsync(callOut, HttpContext.RequestAborted);
+                    }
+                    break;
+                default:
+                    throw UserFriendlyException.SameMessage("未知业务");
+            }
+        }
+
+        /// <summary>
+        /// 启动外呼任务
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        [HttpPost("callout/startcallouttask")]
+        public async Task StartCalloutTask([FromBody] CloseCalloutTaskReq request)
+        {
+            switch (request.TypeId)
+            {
+                case 1:
+                    var aiVisit = await _aiOrderVisitRepository.Queryable()
+                        .FirstAsync(x => x.Id == request.Id, HttpContext.RequestAborted);
+                    if (aiVisit != null && !string.IsNullOrEmpty(aiVisit.BatchUid))
+                    {
+                        if (aiVisit.TaskState != EAiOrderVisitTaskState.Pause)
+                            throw UserFriendlyException.SameMessage("当前状态不能启动");
+
+                        bool isOk = await _aiVisitService.ChangeStatusAsync(aiVisit.BatchUid, "start", HttpContext.RequestAborted);
+
+                        if (!isOk)
+                            throw UserFriendlyException.SameMessage("启动失败");
+
+                        aiVisit.TaskState = EAiOrderVisitTaskState.InProgress;
+                        await _aiOrderVisitRepository.UpdateAsync(aiVisit, HttpContext.RequestAborted);
+                    }
+                    break;
+                case 2:
+                    var callOut = await _callOutTaskRepository.Queryable()
+                       .FirstAsync(x => x.Id == request.Id);
+                    if (callOut != null && !string.IsNullOrEmpty(callOut.BatchUid))
+                    {
+                        if (callOut.AiCallOutTaskState != EAiCallOutTaskState.Pause)
+                            throw UserFriendlyException.SameMessage("当前状态不能启动");
+
+                        bool isOk = await _aiVisitService.ChangeStatusAsync(callOut.BatchUid, "start", HttpContext.RequestAborted);
+
+                        if (!isOk)
+                            throw UserFriendlyException.SameMessage("启动失败");
+                        //处理业务数据
+                        callOut.AiCallOutTaskState = EAiCallOutTaskState.Pause;
+                        await _callOutTaskRepository.UpdateAsync(callOut, HttpContext.RequestAborted);
+                    }
+                    break;
+                default:
+                    break;
+            }
+        }
 
         #endregion
 

+ 2 - 0
src/Hotline.Share/Enums/Ai/EAiCallOutTaskState.cs

@@ -20,5 +20,7 @@ namespace Hotline.Share.Enums.Ai
 
         [Description("已终止")]
         Close = 4,
+        [Description("已暂停")]
+        Pause = 5,
     }
 }

+ 2 - 0
src/Hotline.Share/Enums/Ai/EAiOrderVisitTaskState.cs

@@ -15,6 +15,8 @@ namespace Hotline.Share.Enums.Ai
         Ended = 3,
         [Description("已终止")]
         Close = 4,
+        [Description("已暂停")]
+        Pause = 5,
     }
 
 }