Browse Source

Merge branch 'feature/sync_call_result' into test

qinchaoyue 1 tháng trước cách đây
mục cha
commit
b005ed172a

+ 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

+ 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; }
     }
 }