Bläddra i källkod

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

田爽 1 månad sedan
förälder
incheckning
091867c396

+ 8 - 8
src/Hotline.Api/StartupHelper.cs

@@ -325,14 +325,14 @@ namespace Hotline.Api
                             .WithCronSchedule("0/10 * * * * ?")
                         );
 
-                        //var getCallSatisfactionJobKey = new JobKey(nameof(XingTangCallSatisfactionSyncJob));
-                        //d.AddJob<XingTangCallSatisfactionSyncJob>(getCallSatisfactionJobKey);
-                        //d.AddTrigger(t => t
-                        //    .WithIdentity("get-callsatisfaction-trigger")
-                        //    .ForJob(getCallSatisfactionJobKey)
-                        //    .StartNow()
-                        //    .WithCronSchedule("0/30 * * * * ?")
-                        //);
+                        var getCallSatisfactionJobKey = new JobKey(nameof(XingTangCallSatisfactionSyncJob));
+                        d.AddJob<XingTangCallSatisfactionSyncJob>(getCallSatisfactionJobKey);
+                        d.AddTrigger(t => t
+                            .WithIdentity("get-callsatisfaction-trigger")
+                            .ForJob(getCallSatisfactionJobKey)
+                            .StartNow()
+                            .WithCronSchedule("0/30 * * * * ?")
+                        );
 
                         break;
                 }

+ 17 - 3
src/Hotline.Application/CallCenter/DefaultCallApplication.cs

@@ -259,6 +259,8 @@ public abstract class DefaultCallApplication : ICallApplication
     /// </summary>
     public virtual ISugarQueryable<CallNativeDto> QueryCallsFixedAsync(QueryCallsFixedDto dto, CancellationToken cancellationToken)
     {
+        if (dto.SortField.NotNullOrEmpty())
+            dto.SortField = dto.SortField.ToLower();
         var query = _callNativeRepository.Queryable(includeDeleted: true)
             .LeftJoin<Order>((d, o) => d.Id == o.CallId)
             .LeftJoin<OrderVisit>((d, o, v) => d.Id == v.CallId)
@@ -278,7 +280,9 @@ public abstract class DefaultCallApplication : ICallApplication
             .WhereIF(dto.WaitDurationEnd != null && dto.WaitDurationEnd > 0, d => d.WaitDuration <= dto.WaitDurationEnd)
             .WhereIF(dto.IsMissOrder != null && dto.IsMissOrder.Value == true, (d, o, v) => string.IsNullOrEmpty(o.Id) == true)
             .WhereIF(dto.IsMissOrder != null && dto.IsMissOrder.Value == false, (d, o, v) => string.IsNullOrEmpty(o.Id) == false)
-            .OrderByDescending(d => d.Id);
+            .OrderByIF(dto.SortField.IsNullOrEmpty(), (d, o, v) => d.BeginIvrTime, OrderByType.Desc)
+            .OrderByIF(dto is { SortField: "waitduration", SortRule: 0 }, (d, o, v) =>  d.WaitDuration , OrderByType.Asc)
+            .OrderByIF(dto is { SortField: "waitduration", SortRule: 1 }, (d, o, v) => d.WaitDuration, OrderByType.Desc);
 
         query = query.WhereIF(dto.Type == 3, (d, o, v) => d.AnsweredTime == null);
         query = query.WhereIF(dto.Type == 1, (d, o, v) => d.Direction == ECallDirection.In && d.AnsweredTime != null);
@@ -306,8 +310,18 @@ public abstract class DefaultCallApplication : ICallApplication
                 Title = o.Title,
                 IsVisit = !SqlFunc.IsNullOrEmpty(v.Id),
                 IsOrder = !SqlFunc.IsNullOrEmpty(o.Id),
-                StaffNo = SqlFunc.IsNull(SqlFunc.Subqueryable<CallNative>().Where(s => s.CallNo == d.CallNo && SqlFunc.IsNullOrEmpty(s.CallNo) == false && s.CallNo != "0").Select(s => s.StaffNo), "0"),
-                TelNo = SqlFunc.IsNull(SqlFunc.Subqueryable<CallNative>().Where(s => s.CallNo == d.TelNo && SqlFunc.IsNullOrEmpty(s.TelNo) == false && s.TelNo != "0").Select(s => s.TelNo), "0"),
+                StaffNo = SqlFunc.Coalesce(
+                    SqlFunc.IIF(d.StaffNo == "0", null, d.StaffNo),
+                    SqlFunc.Subqueryable<CallNative>()
+                        .Where(m => m.CallNo == d.CallNo && m.StaffNo != "0")
+                        .Max(m => m.StaffNo)
+                    ),
+                TelNo = SqlFunc.Coalesce(
+                    SqlFunc.IIF(d.TelNo == "0", null, d.TelNo),
+                    SqlFunc.Subqueryable<CallNative>()
+                        .Where(m => m.CallNo == d.CallNo && m.TelNo != "0")
+                        .Max(m => m.TelNo)
+                    ),
             }, true);
         }
         return query.Select((d, o, v) => new CallNativeDto

+ 5 - 0
src/Hotline.Application/Jobs/XingTangCallsSyncJob.cs

@@ -116,6 +116,11 @@ namespace Hotline.Application.Jobs
                             }
                         }
 
+                        if (call.AnsweredTime == null && call.Direction == ECallDirection.In && call.WaitDuration == 0)
+                        {
+                            call.WaitDuration = call.EndTime.GetDifferenceSeconds(call.BeginIvrTime.Value);
+                        }
+
                         if (call.GroupId == "0" && call.CallState != ECallState.IVRNoAccept)
                         {
                             call.CallState = ECallState.Invalid;

+ 1 - 1
src/Hotline.Share/Dtos/CallCenter/CallNativeDto.cs

@@ -33,7 +33,7 @@ namespace Hotline.Share.Dtos.CallCenter
         /// <summary>
         /// 响应分机号
         /// </summary>
-        public string TelNo { get; set; }
+        public string? TelNo { get; set; }
 
         /// <summary>
         /// 挂断方

+ 10 - 0
src/Hotline.Share/Dtos/CallCenter/QueryCallsFixedDto.cs

@@ -66,5 +66,15 @@ namespace Hotline.Share.Dtos.CallCenter
         /// 3: 未接
         /// </summary>
         public int Type { get; set; }
+
+        /// <summary>
+        /// 排序字段
+        /// </summary>
+        public string? SortField { get; set; }
+
+        /// <summary>
+        /// 排序方式 0 升序 1 降序
+        /// </summary>
+        public int? SortRule { get; set; }
     }
 }