Browse Source

Merge branch 'test' of http://110.188.24.182:10023/Fengwo/hotline into test

xf 2 weeks ago
parent
commit
4eefa36f16

+ 11 - 2
src/Hotline.Api/Controllers/IPPbxController.cs

@@ -74,6 +74,7 @@ namespace Hotline.Api.Controllers
         private readonly IRepository<TelOperation> _telOperationRepository;
         private readonly IOptionsSnapshot<AppConfiguration> _appOptions;
         private readonly IRepository<VoiceEvaluationButton> _voiceEvaluationButtonRepository;
+        private readonly IOrderVisitDomainService _orderVisitDomainService;
 
         public IPPbxController(IMapper mapper, IUserDomainService userDomainService,
             ISessionContext sessionContext, IRepository<TrCallRecord> trCallRecordRepository,
@@ -94,7 +95,8 @@ namespace Hotline.Api.Controllers
             ICallTelClient callTelClient,
             IRepository<TelOperation> telOperationRepository,
            IOptionsSnapshot<AppConfiguration> appOptions,
-           IRepository<VoiceEvaluationButton> voiceEvaluationButtonRepository)
+           IRepository<VoiceEvaluationButton> voiceEvaluationButtonRepository,
+           IOrderVisitDomainService orderVisitDomainService)
         {
             _mapper = mapper;
             _userDomainService = userDomainService;
@@ -125,6 +127,7 @@ namespace Hotline.Api.Controllers
             _telOperationRepository = telOperationRepository;
             _appOptions = appOptions;
             _voiceEvaluationButtonRepository = voiceEvaluationButtonRepository;
+            _orderVisitDomainService = orderVisitDomainService;
         }
 
         #region 添添呼
@@ -708,7 +711,13 @@ namespace Hotline.Api.Controllers
         {
             var data = _mapper.Map<VoiceEvaluationButton>(dto);
             await _voiceEvaluationButtonRepository.AddAsync(data, HttpContext.RequestAborted);
-
+            try
+            {
+                await _orderVisitDomainService.UpdateVoiceReplyAsync(data);
+            }
+            catch (Exception)
+            {
+            }
         }
 
         #endregion

+ 12 - 13
src/Hotline.Application/OrderApp/OrderApplication.cs

@@ -986,8 +986,8 @@ public class OrderApplication : IOrderApplication, IScopeDependency
                 d.Order.SourceChannelCode == "SZMHD" && d.Order.IsProvince == true) //政民互动
             .WhereIF(!string.IsNullOrEmpty(dto.ProvinceChannel) && dto.ProvinceChannel == "3", d => d.Order.Source == ESource.ProvinceStraight &&
                 d.Order.SourceChannelCode == "S12345" && d.Order.IsProvince == true) //省12345
-            .WhereIF(dto.PublishState.HasValue , d=>d.PublishState == dto.PublishState.Value) //发布范围 是否公开
-			.OrderByIF(string.IsNullOrEmpty(dto.SortField), d => d.CreationTime, OrderByType.Desc)
+            .WhereIF(dto.PublishState.HasValue, d => d.PublishState == dto.PublishState.Value) //发布范围 是否公开
+            .OrderByIF(string.IsNullOrEmpty(dto.SortField), d => d.CreationTime, OrderByType.Desc)
             .OrderByIF(dto is { SortRule: 0, SortField: "creationTime" }, d => d.Order.CreationTime, OrderByType.Asc)   //受理时间
             .OrderByIF(dto is { SortRule: 1, SortField: "creationTime" }, d => d.Order.CreationTime, OrderByType.Desc)
             .OrderByIF(dto is { SortRule: 0, SortField: "filedTime" }, d => d.Order.FiledTime, OrderByType.Asc)  //办结时间
@@ -4564,14 +4564,14 @@ public class OrderApplication : IOrderApplication, IScopeDependency
 
             .OrderByIF(_appOptions.Value.IsYiBin && dto.VisitStateQuery != EVisitStateQuery.Visited, d => d.Order.IsUrgent, OrderByType.Desc)
             .OrderByIF(_appOptions.Value.IsZiGong == false, d => d.PublishTime, OrderByType.Desc)
-            .OrderByIF(dto is { SortField: "publishTime", SortRule: 0 }, x => x.PublishTime, OrderByType.Asc) // 发布时间升序
-            .OrderByIF(dto is { SortField: "publishTime", SortRule: 1 }, x => x.PublishTime, OrderByType.Desc)// 发布时间升序
-            .OrderByIF(dto is { SortField: "order.creationTime", SortRule: 0 }, x => x.Order.CreationTime, OrderByType.Asc) // 受理时间升序
-            .OrderByIF(dto is { SortField: "order.creationTime", SortRule: 1 }, x => x.Order.CreationTime, OrderByType.Desc) // 受理时间升序
-            .OrderByIF(dto is { SortField: "order.filedTime", SortRule: 0 }, x => x.Order.FiledTime, OrderByType.Asc) // 办结时间升序
-            .OrderByIF(dto is { SortField: "order.filedTime", SortRule: 1 }, x => x.Order.FiledTime, OrderByType.Desc) // 办结时间升序
-            .OrderByIF(dto is { SortField: "visitTime", SortRule: 0 }, x => x.VisitTime, OrderByType.Asc) // 回访时间升序
-            .OrderByIF(dto is { SortField: "visitTime", SortRule: 1 }, x => x.VisitTime, OrderByType.Desc) // 回访时间升序
+            .OrderByIF(dto is { SortField: "publishTime", SortRule: 0 }, d => d.PublishTime, OrderByType.Asc) // 发布时间升序 
+            .OrderByIF(dto is { SortField: "publishTime", SortRule: 1 }, d => d.PublishTime, OrderByType.Desc)// 发布时间升序
+            .OrderByIF(dto is { SortField: "order.creationTime", SortRule: 0 }, d => d.Order.CreationTime, OrderByType.Asc) // 受理时间升序
+            .OrderByIF(dto is { SortField: "order.creationTime", SortRule: 1 }, d => d.Order.CreationTime, OrderByType.Desc) // 受理时间升序
+            .OrderByIF(dto is { SortField: "order.filedTime", SortRule: 0 }, d => d.Order.FiledTime, OrderByType.Asc) // 办结时间升序
+            .OrderByIF(dto is { SortField: "order.filedTime", SortRule: 1 }, d => d.Order.FiledTime, OrderByType.Desc) // 办结时间升序
+            .OrderByIF(dto is { SortField: "visitTime", SortRule: 0 }, d => d.VisitTime, OrderByType.Asc) // 回访时间升序
+            .OrderByIF(dto is { SortField: "visitTime", SortRule: 1 }, d => d.VisitTime, OrderByType.Desc) // 回访时间升序
             .OrderByIF(_appOptions.Value.IsZiGong && string.IsNullOrEmpty(dto.SortField), d => d.PublishTime, OrderByType.Desc)
             ;
         return query;
@@ -6546,7 +6546,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
     {
         var isAdmin = _orderDomainService.IsCheckAdmin();
         var query = _orderDelayRepository.Queryable();
-        if (!isAdmin)
+        if (!isAdmin && _appOptions.Value.IsZiGong == false)
         {
             query.Where(d => SqlFunc.Subqueryable<WorkflowTrace>()
                 .Where(step => step.ExternalId == d.Id &&
@@ -6576,8 +6576,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
                 // .WhereIF(dto.DataScope is 0, d => (d.AutomaticDelayNum == 0 || d.AutomaticDelayNum == null) && d.DelayState != EDelayState.Withdraw)
                 .WhereIF(dto.DataScope is 0, d => d.DelayState != EDelayState.Withdraw)
                 .WhereIF(dto.DataScope is 0 && !_sessionContext.OrgIsCenter, d => d.CreatorOrgId.StartsWith(_sessionContext.RequiredOrgId))
-                .WhereIF(!string.IsNullOrEmpty(dto.Keyword),
-                    d => d.Order.Title.Contains(dto.Keyword!) || d.Order.No.Contains(dto.Keyword!))
+                .WhereIF(!string.IsNullOrEmpty(dto.Keyword), d => d.Order.Title.Contains(dto.Keyword!) || d.Order.No.Contains(dto.Keyword!))
                 .WhereIF(dto.IsApply == true, d => d.DelayState != EDelayState.Examining)
                 .WhereIF(dto.IsApply == false, d => d.DelayState == EDelayState.Examining)
                 .WhereIF(dto.DelayState != null, d => d.DelayState == dto.DelayState)

+ 2 - 1
src/Hotline.Repository.SqlSugar/CallCenter/TrCallRecordRepository.cs

@@ -264,7 +264,7 @@ namespace Hotline.Repository.SqlSugar.CallCenter
                  .WhereIF(dto.BeginIvrTimeEnd.HasValue, x => x.BeginIvrTime <= dto.BeginIvrTimeEnd)
                  .WhereIF(dto.EndIvrTimeStart.HasValue, x => x.EndIvrTime >= dto.EndIvrTimeStart)
                  .WhereIF(dto.EndIvrTimeEnd.HasValue, x => x.EndIvrTime <= dto.EndIvrTimeEnd)
-                 .WhereIF(dto.BeginQueueTimeStart.HasValue, x => x.BeginQueueTime >= dto.BeginQueueTimeEnd)
+                 .WhereIF(dto.BeginQueueTimeStart.HasValue, x => x.BeginQueueTime >= dto.BeginQueueTimeStart)
                  .WhereIF(dto.BeginQueueTimeEnd.HasValue, x => x.BeginQueueTime <= dto.BeginQueueTimeEnd)
                  .WhereIF(dto.EndQueueTimeStart.HasValue, x => x.EndQueueTime >= dto.EndQueueTimeStart)
                  .WhereIF(dto.EndQueueTimeEnd.HasValue, x => x.EndQueueTime <= dto.EndQueueTimeEnd)
@@ -298,6 +298,7 @@ namespace Hotline.Repository.SqlSugar.CallCenter
                 .Select(x => new QueryCallDateStatisticsDetailResp()
                 {
                     Date = x.CreatedTime.ToString("yyyy-MM-dd"),
+                    //CallInTotal = SqlFunc.AggregateSum(SqlFunc.IIF(x.CallDirection == ECallDirection.In, 1, 0)),//呼入总量
                     IvrCallInTotal = SqlFunc.AggregateSum(SqlFunc.IIF(x.BeginIvrTime.HasValue && !x.BeginQueueTime.HasValue && !x.BeginRingTime.HasValue && x.OnState == EOnState.NoOn, 1, 0)), //IVR挂断
                     PersonCallInCount = SqlFunc.AggregateSum(SqlFunc.IIF(x.IvrDtmf.Substring(x.IvrDtmf.Length - 1, 1) == "1", 1, 0)),
                     EnterpriseCallInCount = SqlFunc.AggregateSum(SqlFunc.IIF(x.IvrDtmf.Substring(x.IvrDtmf.Length - 1, 1) == "2", 1, 0)),

+ 2 - 0
src/Hotline.Share/Dtos/CallCenter/BiQueryCallsDto.cs

@@ -239,10 +239,12 @@ public class QueryCallDateStatisticsDetailResp
     /// 日期
     /// </summary>
     public string Date { get; set; }
+
     /// <summary>
     /// 呼入总量(计算所得)
     /// </summary>
     public int CallInTotal => IvrCallInTotal + PersonCallInCount + EnterpriseCallInCount + GaoXiaoCallInCount + AiCallInCount;
+    //public int CallInTotal { get; set; }
 
     /// <summary>
     /// IVR呼入总量

+ 9 - 1
src/Hotline/Orders/IOrderVisitDomainService.cs

@@ -1,9 +1,17 @@
-using Hotline.Settings;
+using Hotline.CallCenter.Calls;
+using Hotline.Settings;
 using Hotline.Share.Dtos.Push;
 
 namespace Hotline.Orders;
 public interface IOrderVisitDomainService
 {
+    /// <summary>
+    /// 语音回访处理
+    /// </summary>
+    /// <param name="dto"></param>
+    /// <returns></returns>
+    Task UpdateVoiceReplyAsync(VoiceEvaluationButton dto);
+
     /// <summary>
     /// 根据用户短信或电话回复的内容转换成系统中对应的评价
     /// </summary>

+ 31 - 12
src/Hotline/Orders/OrderVisitDomainService.cs

@@ -1,26 +1,21 @@
 using DotNetCore.CAP;
 using Hotline.Caching.Interfaces;
-using Hotline.Share.Dtos;
+using Hotline.CallCenter.Calls;
+using Hotline.Configurations;
+using Hotline.EventBus;
+using Hotline.Settings;
 using Hotline.Share.Dtos.Order;
 using Hotline.Share.Dtos.Push;
 using Hotline.Share.Enums.Order;
 using Hotline.Share.Tools;
 using Mapster;
+using MediatR;
 using Microsoft.Extensions.Logging;
+using Microsoft.Extensions.Options;
+using System.Text.RegularExpressions;
 using XF.Domain.Dependency;
 using XF.Domain.Exceptions;
 using XF.Domain.Repository;
-using Hotline.EventBus;
-using Hotline.Orders.Notifications;
-using Hotline.Configurations;
-using Microsoft.Extensions.Options;
-using Hotline.Settings;
-using System.Text.RegularExpressions;
-using System.Threading;
-using Hotline.Caching.Services;
-using Hotline.Push.Notifies;
-using Hotline.Share.Enums.Push;
-using MediatR;
 
 namespace Hotline.Orders;
 public class OrderVisitDomainService : IOrderVisitDomainService, IScopeDependency
@@ -67,6 +62,30 @@ public class OrderVisitDomainService : IOrderVisitDomainService, IScopeDependenc
         _mediator = mediator;
     }
 
+    /// <summary>
+    /// 语音回访处理
+    /// </summary>
+    /// <param name="dto"></param>
+    /// <returns></returns>
+    public async Task UpdateVoiceReplyAsync(VoiceEvaluationButton dto)
+    {
+        var data = await _orderVisitRepository.GetAsync(p => p.Id == dto.CustomerId);
+        if (data != null)
+        {
+            var replyTxt = "智能电话回访不作评价";
+            if (dto.Content == "1")
+                replyTxt = "智能电话回访满意";
+            else if (dto.Content == "2")
+                replyTxt = "智能电话回访不满意";
+
+            await UpdateSmsReplyAsync(data, replyTxt);
+        }
+        else
+        {
+            _logRepository.Add("语音回访-不处理", dto, "未查询到回访数据", "UpdateVoiceReplyAsync", 0);
+        }
+    }
+
     /// <summary>
     /// 用户回访短信回复更新回访状态
     /// </summary>

+ 3 - 0
test/Hotline.Tests/Domain/OrderVisitDomainServiceTest.cs

@@ -121,6 +121,9 @@ public class OrderVisitDomainServiceTest : TestBase
     [InlineData("都没有办理好", "SMSUnsatisfied", "", "", "都没有办理好", "Published", "YiBin")]
     [InlineData("1", "Visited", "4", "满意", "满意", "Visited", "YiBin")]
     [InlineData("2", "SMSUnsatisfied", "2", "不满意", "不满意", "Published", "YiBin")]
+    [InlineData("智能电话回访满意", "Visited", "4", "满意", "满意", "Visited")]
+    [InlineData("智能电话回访不满意", "Visited", "2", "不满意", "不满意", "Visited")]
+    [InlineData("智能电话回访不作评价", "Visited", "7", "未做评价", "未做评价", "Visited")]
     public async Task UpdateSmsReply_Test(string content, string visitState, string orgResuktKey, string orgResuktValue, string visitContent, string visited = "Visited", string appScope = "ZiGong")
     {
         if (appScope != "ZiGong")