|
@@ -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
|