Dun.Jason 11 maanden geleden
bovenliggende
commit
4c5e193f81

+ 5 - 0
src/Hotline.Ai.Jths/AiVisitConfig.cs

@@ -59,5 +59,10 @@ namespace Hotline.Ai.Jths
         /// 坐席不满意原因
         /// </summary>
         public string VisitContentIdTwo { get; set;}
+
+        /// <summary>
+        /// 未处理内容
+        /// </summary>
+        public string VisitContentIdThree { get; set; }
     }
 }

+ 145 - 136
src/Hotline.Api/Controllers/AiController.cs

@@ -125,172 +125,181 @@ namespace Hotline.Api.Controllers
                     var aiOrderVisitDetail = aiOrderVisit.AiOrderVisitDetails.FirstOrDefault(x => x.TaskUid == dto.TaskUid);
                     if (aiOrderVisitDetail != null)
                     {
+                        var list = dto.CallRecordList.OrderBy(x => x.CallStartTime);
                         // 回访结果(ReturnVisit)[1成功、0不涉及、-1失败]
-                        var callRecord = dto.CallRecordList.OrderByDescending(x => x.CallNo).FirstOrDefault(x => x.ReturnVisit == 1);
-                        if (callRecord != null) //有结果的任务
+                        foreach (var callRecord in list)
                         {
-                            aiOrderVisitDetail.AiOrderVisitState = Share.Enums.Ai.EAiOrderVisitState.Ended; //更新AI子表
-                            aiOrderVisitDetail.AiVisitTime = DateTime.Now;
-                            aiOrderVisit.VisitedCount++;
-                            //处理结果
-                            var visitDetail = _orderVisitDetailRepository.Queryable().Where(x => x.VisitId == aiOrderVisitDetail.OrderVisit.Id);
-                            //先处理子表
-                            //先处理坐席(因没有坐席回访,所以默认满意)
-                            var seatDetail = visitDetail.First(x => x.VisitTarget == Share.Enums.Order.EVisitTarget.Seat);
-                            if (seatDetail != null)
+                            if (callRecord != null) //有结果的任务
                             {
-                                seatDetail.VoiceEvaluate = Share.Enums.Order.EVoiceEvaluate.Satisfied;
-                                seatDetail.SeatEvaluate = Share.Enums.Order.ESeatEvaluate.Satisfied;
-                            }
-                            await _orderVisitDetailRepository.UpdateAsync(seatDetail, HttpContext.RequestAborted);
-                            //处理部门
-                            var orgDetail = visitDetail.Where(x => x.VisitTarget == Share.Enums.Order.EVisitTarget.Org).ToList();
-                            //过滤结果
-                            var orgProcessingResults = new Kv();
-                            var orgHandledAttitude = new Kv();
-                            EVoiceEvaluate? seatEvaluate;
-                            var visitContent = "";
-                            var seatVisitContent = "";
-                            foreach (var item in callRecord.QuestionnaireResult)
-                            {
-                                ////服务过程满意度
-                                //if (item.QuestionId == _options.Value.QuestionIdOne)
-                                //{
-                                //    if (item.QuestionResult == "满意")
-                                //    {
-                                //        orgHandledAttitude = new Kv() { Key="4", Value="满意" };
-                                //    }
-                                //    else
-                                //    {
-                                //        orgHandledAttitude = new Kv() { Key = "2", Value = "不满意" };
-
-                                //    }
-                                //}
-                                //是否解决
-                                if (item.QuestionId == _options.Value.QuestionIdOne)
+                                aiOrderVisitDetail.AiOrderVisitState = Share.Enums.Ai.EAiOrderVisitState.Ended; //更新AI子表
+                                aiOrderVisitDetail.AiVisitTime = DateTime.Now;
+                                aiOrderVisit.VisitedCount++;
+                                //处理结果
+                                var visitDetail = _orderVisitDetailRepository.Queryable().Where(x => x.VisitId == aiOrderVisitDetail.OrderVisit.Id);
+                                //先处理子表
+
+                                //处理部门
+                                var orgDetail = visitDetail.Where(x => x.VisitTarget == Share.Enums.Order.EVisitTarget.Org).ToList();
+                                //过滤结果
+                                var orgProcessingResults = new Kv();
+                                var orgHandledAttitude = new Kv();
+                                ESeatEvaluate? seatEvaluate = null;
+                                var visitContent = "";
+                                var seatVisitContent = "";
+                                var volveConent = "";
+                                foreach (var item in callRecord.QuestionnaireResult)
                                 {
-                                    if (item.QuestionResult == "")
+                                    ////服务过程满意度
+                                    //if (item.QuestionId == _options.Value.QuestionIdOne)
+                                    //{
+                                    //    if (item.QuestionResult == "满意")
+                                    //    {
+                                    //        orgHandledAttitude = new Kv() { Key="4", Value="满意" };
+                                    //    }
+                                    //    else
+                                    //    {
+                                    //        orgHandledAttitude = new Kv() { Key = "2", Value = "不满意" };
+
+                                    //    }
+                                    //}
+                                    //通话录音
+
+                                    //是否解决
+                                    if (item.QuestionId == _options.Value.QuestionIdOne)
                                     {
-
+                                        if (item.QuestionResult == "")
+                                        {
+
+                                        }
+                                        else
+                                        {
+                                            volveConent = callRecord.SceneVariable[_options.Value.VisitContentIdThree];
+                                        }
                                     }
-                                    else
+                                    //办件结果满意度
+                                    if (item.QuestionId == _options.Value.QuestionIdTwo)
                                     {
-
+                                        if (item.QuestionResult == "满意")
+                                        {
+                                            orgProcessingResults = new Kv() { Key = "4", Value = "满意" };
+                                        }
+                                        else
+                                        {
+                                            orgProcessingResults = new Kv() { Key = "2", Value = "不满意" };
+                                            visitContent = callRecord.SceneVariable[_options.Value.VisitContentIdOne];
+                                        }
                                     }
-                                }
-                                //办件结果满意度
-                                if (item.QuestionId == _options.Value.QuestionIdTwo)
-                                {
-                                    if (item.QuestionResult == "满意")
+                                    else
                                     {
-                                        orgProcessingResults = new Kv() { Key = "4", Value = "满意" };
+                                        aiOrderVisitDetail.OrderVisit.VisitState = Share.Enums.Order.EVisitState.WaitForVisit;
                                     }
-                                    else
+
+                                    //坐席是否满意
+                                    if (item.QuestionId == _options.Value.QuestionIdThree)
                                     {
-                                        orgProcessingResults = new Kv() { Key = "2", Value = "不满意" };
-                                        visitContent = callRecord.SceneVariable[_options.Value.VisitContentIdOne];
+                                        if (item.QuestionResult == "满意")
+                                        {
+                                            seatEvaluate = ESeatEvaluate.Satisfied;
+                                        }
+                                        else
+                                        {
+                                            seatVisitContent = callRecord.SceneVariable[_options.Value.VisitContentIdTwo];
+                                        }
                                     }
                                 }
-                                else
+
+                                //先处理坐席(因没有坐席回访,所以默认满意)
+                                var seatDetail = visitDetail.First(x => x.VisitTarget == Share.Enums.Order.EVisitTarget.Seat);
+                                if (seatDetail != null)
                                 {
-                                    aiOrderVisitDetail.OrderVisit.VisitState = Share.Enums.Order.EVisitState.WaitForVisit;
+                                    seatDetail.VoiceEvaluate = Share.Enums.Order.EVoiceEvaluate.Satisfied;
+                                    seatDetail.SeatEvaluate = seatEvaluate;
                                 }
+                                await _orderVisitDetailRepository.UpdateAsync(seatDetail, HttpContext.RequestAborted);
 
-                                //坐席是否满意
-                                if (item.QuestionId == _options.Value.QuestionIdThree)
+                                //处理结果
+                                orgDetail.ForEach(x =>
                                 {
-                                    if (item.QuestionResult == "满意")
+                                    x.OrgHandledAttitude = orgHandledAttitude;
+                                    x.OrgProcessingResults = orgProcessingResults;
+                                    x.VisitContent = visitContent;
+                                    if (orgProcessingResults.Value == "不满意")
                                     {
-
+                                        //x.OrgNoSatisfiedReason = new List<Kv>() { new Kv() { Key = "7", Value = "未回复" } };
+                                        //TODO 记录不满意原因到内容中供人工回访甄别选择不满意原因
+                                        aiOrderVisitDetail.OrderVisit.VisitState = Share.Enums.Order.EVisitState.WaitForVisit;
                                     }
                                     else
                                     {
-                                        seatVisitContent = callRecord.SceneVariable[_options.Value.VisitContentIdTwo];
+                                        aiOrderVisitDetail.OrderVisit.VisitState = Share.Enums.Order.EVisitState.Visited;
                                     }
-                                }
-
-
-                            }
-                            //处理结果
-                            orgDetail.ForEach(x =>
-                            {
-                                x.OrgHandledAttitude = orgHandledAttitude;
-                                x.OrgProcessingResults = orgProcessingResults;
-                                x.VisitContent = visitContent;
-                                if (orgProcessingResults.Value == "不满意")
+                                });
+                                await _orderVisitDetailRepository.UpdateRangeAsync(orgDetail, HttpContext.RequestAborted);
+
+                                //var first = orgProcessingResults; //aiOrderVisitDetail.OrderVisit.OrderVisitDetails.FirstOrDefault(x => x.VisitTarget == EVisitTarget.Org);
+                                //处理主表
+                                aiOrderVisitDetail.OrderVisit.AiVisitCount++;
+                                aiOrderVisitDetail.OrderVisit.VisitTime = DateTime.Now;
+                                aiOrderVisitDetail.OrderVisit.IsPutThrough = true;
+                                aiOrderVisitDetail.OrderVisit.VisitType = Share.Enums.Order.EVisitType.ChipVoiceVisit;
+                                aiOrderVisitDetail.OrderVisit.AiVisitTime();
+                                aiOrderVisitDetail.IsSuccess = true;
+                                if (orgProcessingResults != null)
                                 {
-                                    //x.OrgNoSatisfiedReason = new List<Kv>() { new Kv() { Key = "7", Value = "未回复" } };
-                                    //TODO 记录不满意原因到内容中供人工回访甄别选择不满意原因
-                                    aiOrderVisitDetail.OrderVisit.VisitState = Share.Enums.Order.EVisitState.WaitForVisit;
+                                    aiOrderVisitDetail.OrderVisit.NowEvaluate = orgProcessingResults;
                                 }
-                                else
+                                await _orderVisitRepository.UpdateAsync(aiOrderVisitDetail.OrderVisit, HttpContext.RequestAborted);
+
+                                //处理Order表
+                                if (orgProcessingResults != null && aiOrderVisitDetail.OrderVisit.VisitState == EVisitState.Visited)
                                 {
-                                    aiOrderVisitDetail.OrderVisit.VisitState = Share.Enums.Order.EVisitState.Visited;
+                                    aiOrderVisitDetail.OrderVisit.Order.Visited(orgProcessingResults.Key, orgProcessingResults.Value);
+                                    await _orderRepository.UpdateAsync(aiOrderVisitDetail.OrderVisit.Order);
+
+                                    //推省上
+                                    var orderDto = _mapper.Map<OrderDto>(aiOrderVisitDetail.OrderVisit.Order);
+                                    await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderVisited,
+                                    new PublishVisitDto()
+                                    {
+                                        Order = orderDto,
+                                        No = aiOrderVisitDetail.OrderVisit.No,
+                                        VisitType = aiOrderVisitDetail.OrderVisit.VisitType,
+                                        VisitName = aiOrderVisitDetail.OrderVisit.CreatorName,
+                                        VisitTime = aiOrderVisitDetail.OrderVisit.VisitTime,
+                                        VisitRemark = string.IsNullOrEmpty(visitContent) ? aiOrderVisitDetail.OrderVisit.NowEvaluate?.Value : visitContent,
+                                        AreaCode = aiOrderVisitDetail.OrderVisit.Order.AreaCode!,
+                                        SubjectResultSatifyCode = orgProcessingResults.Key,
+                                        FirstSatisfactionCode = aiOrderVisitDetail.OrderVisit.Order.FirstVisitResultCode!,
+                                        ClientGuid = ""
+                                    }, cancellationToken: HttpContext.RequestAborted);
+
+                                    //推门户
+                                    await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderVisitedWeb, new PublishVisitAllDto()
+                                    {
+                                        Id = aiOrderVisitDetail.OrderVisit.Id,
+                                        Order = orderDto,
+                                        OrderVisitDetails = _mapper.Map<List<VisitDetailDto>>(aiOrderVisitDetail.OrderVisit.OrderVisitDetails),
+                                        VisitTime = aiOrderVisitDetail.OrderVisit.VisitTime,
+                                        VisitType = aiOrderVisitDetail.OrderVisit.VisitType,
+                                        PublishTime = aiOrderVisitDetail.OrderVisit.PublishTime,
+                                    }, cancellationToken: HttpContext.RequestAborted);
                                 }
-                            });
-                            await _orderVisitDetailRepository.UpdateRangeAsync(orgDetail, HttpContext.RequestAborted);
-
-                            //var first = orgProcessingResults; //aiOrderVisitDetail.OrderVisit.OrderVisitDetails.FirstOrDefault(x => x.VisitTarget == EVisitTarget.Org);
-                            //处理主表
-                            aiOrderVisitDetail.OrderVisit.AiVisitCount++;
-                            aiOrderVisitDetail.OrderVisit.VisitTime = DateTime.Now;
-                            aiOrderVisitDetail.OrderVisit.IsPutThrough = true;
-                            aiOrderVisitDetail.OrderVisit.VisitType = Share.Enums.Order.EVisitType.ChipVoiceVisit;
-                            aiOrderVisitDetail.OrderVisit.AiVisitTime();
-                            aiOrderVisitDetail.IsSuccess = true;
-                            if (orgProcessingResults != null)
-                            {
-                                aiOrderVisitDetail.OrderVisit.NowEvaluate = orgProcessingResults;
                             }
-                            await _orderVisitRepository.UpdateAsync(aiOrderVisitDetail.OrderVisit, HttpContext.RequestAborted);
-
-                            //处理Order表
-                            if (orgProcessingResults != null && aiOrderVisitDetail.OrderVisit.VisitState == EVisitState.Visited)
+                            else
                             {
-                                aiOrderVisitDetail.OrderVisit.Order.Visited(orgProcessingResults.Key, orgProcessingResults.Value);
-                                await _orderRepository.UpdateAsync(aiOrderVisitDetail.OrderVisit.Order);
-
-                                //推省上
-                                var orderDto = _mapper.Map<OrderDto>(aiOrderVisitDetail.OrderVisit.Order);
-                                await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderVisited,
-                                new PublishVisitDto()
-                                {
-                                    Order = orderDto,
-                                    No = aiOrderVisitDetail.OrderVisit.No,
-                                    VisitType = aiOrderVisitDetail.OrderVisit.VisitType,
-                                    VisitName = aiOrderVisitDetail.OrderVisit.CreatorName,
-                                    VisitTime = aiOrderVisitDetail.OrderVisit.VisitTime,
-                                    VisitRemark = string.IsNullOrEmpty(visitContent)?aiOrderVisitDetail.OrderVisit.NowEvaluate?.Value: visitContent,
-                                    AreaCode = aiOrderVisitDetail.OrderVisit.Order.AreaCode!,
-                                    SubjectResultSatifyCode = orgProcessingResults.Key,
-                                    FirstSatisfactionCode = aiOrderVisitDetail.OrderVisit.Order.FirstVisitResultCode!,
-                                    ClientGuid = ""
-                                }, cancellationToken: HttpContext.RequestAborted);
-
-                                //推门户
-                                await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderVisitedWeb, new PublishVisitAllDto()
-                                {
-                                    Id = aiOrderVisitDetail.OrderVisit.Id,
-                                    Order = orderDto,
-                                    OrderVisitDetails = _mapper.Map<List<VisitDetailDto>>(aiOrderVisitDetail.OrderVisit.OrderVisitDetails),
-                                    VisitTime = aiOrderVisitDetail.OrderVisit.VisitTime,
-                                    VisitType = aiOrderVisitDetail.OrderVisit.VisitType,
-                                    PublishTime = aiOrderVisitDetail.OrderVisit.PublishTime,
-                                }, cancellationToken: HttpContext.RequestAborted);
+                                aiOrderVisitDetail.AiOrderVisitState = (Share.Enums.Ai.EAiOrderVisitState)(dto.TaskStatus); //更新AI子表
+                                aiOrderVisit.VisitedFailCount++;
+                                //处理回访主表
+                                aiOrderVisitDetail.OrderVisit.AiVisitTime();
+                                aiOrderVisitDetail.OrderVisit.AiVisitCount++;
+                                aiOrderVisitDetail.OrderVisit.IsCanAiVisit = true;
+                                aiOrderVisitDetail.OrderVisit.VisitState = EVisitState.WaitForVisit;
+                                aiOrderVisitDetail.IsSuccess = false;
+                                await _orderVisitRepository.UpdateAsync(aiOrderVisitDetail.OrderVisit, HttpContext.RequestAborted);
                             }
                         }
-                        else
-                        {
-                            aiOrderVisitDetail.AiOrderVisitState = (Share.Enums.Ai.EAiOrderVisitState)(dto.TaskStatus); //更新AI子表
-                            aiOrderVisit.VisitedFailCount++;
-                            //处理回访主表
-                            aiOrderVisitDetail.OrderVisit.AiVisitTime();
-                            aiOrderVisitDetail.OrderVisit.AiVisitCount++;
-                            aiOrderVisitDetail.OrderVisit.IsCanAiVisit = true;
-                            aiOrderVisitDetail.OrderVisit.VisitState = EVisitState.WaitForVisit;
-                            aiOrderVisitDetail.IsSuccess = false;
-                            await _orderVisitRepository.UpdateAsync(aiOrderVisitDetail.OrderVisit, HttpContext.RequestAborted);
-                        }
+                        //var callRecord = dto.CallRecordList.OrderByDescending(x => x.CallNo).FirstOrDefault(x => x.ReturnVisit == 1);
+                       
                         
                         await _aiOrderVisitDetailRepository.UpdateAsync(aiOrderVisitDetail, HttpContext.RequestAborted);
                         if ((aiOrderVisit.VisitedFailCount+aiOrderVisit.VisitedCount)== aiOrderVisit.HasVisitCount)

+ 2 - 1
src/Hotline.Api/config/appsettings.Development.json

@@ -220,7 +220,8 @@
     "QuestionIdTwo": "MTAwMDAxWQWym04VSRwn4dmWKnYEsQ", //办件结果满意度 //开发环境:MTAwMDAxWQWym04VSRwn4dmWKnYEsQ  //生产环境:MTAwMDAxhIyRJzpwTskpsiXPD-uwl0
     "QuestionIdThree": "1", //坐席是否满意  //开发环境:  //生产环境:
     "VisitContentIdOne": "NotSat2", //办件结果不满意原因 // 开发环境:NotSat2   //生产环境:NotSat2
-    "VisitContentIdTwo": "1" //坐席不满意原因  // 开发环境:    //生产环境:
+    "VisitContentIdTwo": "1", //坐席不满意原因  // 开发环境:    //生产环境:
+    "VisitContentIdThree": "1" //未处理内容  //开发环境:  //生产环境:
   },
   //智能质检
   "AiQuality": {

+ 4 - 0
src/Hotline.Share/Dtos/Ai/AiDto.cs

@@ -42,6 +42,10 @@ namespace Hotline.Share.Dtos.Ai
         /// </summary>
         public int CallStatus { get; set; }
 
+        /// <summary>
+        /// 拨通时间
+        /// </summary>
+        public DateTime CallStartTime { get; set; }
         /// <summary>
         /// 回访结果 (1成功、2:不涉及、3:失败)
         /// </summary>