|
@@ -1,55 +1,54 @@
|
|
|
using DotNetCore.CAP;
|
|
|
using Hotline.Application.Quality;
|
|
|
+using Hotline.Authentications;
|
|
|
using Hotline.Caching.Interfaces;
|
|
|
+using Hotline.Configurations;
|
|
|
+using Hotline.EventBus;
|
|
|
using Hotline.File;
|
|
|
+using Hotline.FlowEngine.WorkflowModules;
|
|
|
using Hotline.FlowEngine.Workflows;
|
|
|
using Hotline.Orders;
|
|
|
+using Hotline.Orders.Notifications;
|
|
|
+using Hotline.OrderTranspond;
|
|
|
+using Hotline.Push.Notifies;
|
|
|
using Hotline.Repository.SqlSugar.Extensions;
|
|
|
using Hotline.Repository.SqlSugar.Ts;
|
|
|
+using Hotline.Schedulings;
|
|
|
+using Hotline.SeedData;
|
|
|
+using Hotline.Settings;
|
|
|
+using Hotline.Settings.Hotspots;
|
|
|
+using Hotline.Settings.TimeLimitDomain;
|
|
|
using Hotline.Share.Dtos.DataSharing.PusherHotlineDto;
|
|
|
using Hotline.Share.Dtos.File;
|
|
|
using Hotline.Share.Dtos.FlowEngine;
|
|
|
using Hotline.Share.Dtos.Order;
|
|
|
+using Hotline.Share.Dtos.Order.Publish;
|
|
|
+using Hotline.Share.Dtos.Push;
|
|
|
using Hotline.Share.Dtos.Settings;
|
|
|
+using Hotline.Share.Enums.FlowEngine;
|
|
|
using Hotline.Share.Enums.Order;
|
|
|
+using Hotline.Share.Enums.Push;
|
|
|
using Hotline.Share.Enums.Quality;
|
|
|
using Hotline.Share.Enums.Settings;
|
|
|
+using Hotline.Share.Mq;
|
|
|
using Hotline.Share.Requests;
|
|
|
using Hotline.Tools;
|
|
|
+using Hotline.Users;
|
|
|
+using Mapster;
|
|
|
using MapsterMapper;
|
|
|
+using MediatR;
|
|
|
+using Microsoft.Extensions.Options;
|
|
|
+using PanGu;
|
|
|
using SqlSugar;
|
|
|
using System.Data;
|
|
|
using System.Dynamic;
|
|
|
-using Hotline.Settings;
|
|
|
using XF.Domain.Authentications;
|
|
|
using XF.Domain.Dependency;
|
|
|
+using XF.Domain.Entities;
|
|
|
using XF.Domain.Exceptions;
|
|
|
using XF.Domain.Repository;
|
|
|
-using PanGu;
|
|
|
-using Hotline.Users;
|
|
|
-using Hotline.Settings.Hotspots;
|
|
|
-using Hotline.Share.Enums.FlowEngine;
|
|
|
-using Hotline.Authentications;
|
|
|
-using MediatR;
|
|
|
-using Hotline.Share.Mq;
|
|
|
-using WordInfo = PanGu.WordInfo;
|
|
|
-using Hotline.Schedulings;
|
|
|
-using XF.Domain.Entities;
|
|
|
-using Hotline.Settings.TimeLimitDomain;
|
|
|
-using Hotline.FlowEngine.WorkflowModules;
|
|
|
-using Hotline.SeedData;
|
|
|
-using Hotline.Share.Enums.Push;
|
|
|
-using Hotline.Push.Notifies;
|
|
|
-using Hotline.Configurations;
|
|
|
-using Microsoft.Extensions.Options;
|
|
|
-using Mapster;
|
|
|
-using Hotline.Share.Dtos.Push;
|
|
|
-using Hotline.EventBus;
|
|
|
-using Hotline.Orders.Notifications;
|
|
|
-using Hotline.OrderTranspond;
|
|
|
using XF.Utility.EnumExtensions;
|
|
|
-using Hotline.Share.Dtos.Order.Publish;
|
|
|
-using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
|
|
+using WordInfo = PanGu.WordInfo;
|
|
|
|
|
|
namespace Hotline.Application.Orders;
|
|
|
|
|
@@ -675,8 +674,8 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
|
//.WhereIF(dto.PubState == EPubState.NoPub, d => d.Status == EOrderStatus.Filed)
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.Channel), d => d.SourceChannelCode == dto.Channel)
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.OrderTag), d => d.OrderTagCode == dto.OrderTag!) //工单标签
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.CenterToOrgHandlerName), d => d.CenterToOrgHandlerName == dto.CenterToOrgHandlerName!) //派单人
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.NameOrNo), d => d.AcceptorName == dto.NameOrNo! || d.AcceptorStaffNo == dto.NameOrNo!) //受理人/坐席
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.CenterToOrgHandlerName), d => d.CenterToOrgHandlerName.Contains(dto.CenterToOrgHandlerName)) //派单人
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.NameOrNo), d => d.AcceptorName.Contains(dto.NameOrNo) || d.AcceptorStaffNo.Contains(dto.NameOrNo)) //受理人/坐席
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.ActualHandleOrgName), d => d.ActualHandleOrgName.Contains(dto.ActualHandleOrgName)) //接办部门(综合查询模糊)
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.AcceptType), d => d.AcceptTypeCode == dto.AcceptType) //受理类型
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.Hotspot), d => d.HotspotSpliceName != null && d.HotspotSpliceName.Contains(dto.Hotspot))
|
|
@@ -691,7 +690,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
|
//.WhereIF(dto.FiledType != null && dto.FiledType == FiledType.CenterFiled, d => d.ProcessType == EProcessType.Zhiban)
|
|
|
//.WhereIF(dto.FiledType != null && dto.FiledType == FiledType.OrgFiled, d => d.ProcessType == EProcessType.Jiaoban)
|
|
|
.WhereIF(dto.FiledType != null && dto.FiledType == FiledType.CenterFiled, d => d.FileOrgIsCenter == true)
|
|
|
- .WhereIF(dto.FiledType != null && dto.FiledType == FiledType.OrgFiled, d =>d. FileOrgIsCenter == false)
|
|
|
+ .WhereIF(dto.FiledType != null && dto.FiledType == FiledType.OrgFiled, d => d.FileOrgIsCenter == false)
|
|
|
.WhereIF(dto.IsCountersign != null && dto.IsCountersign == true, d => d.CounterSignType != null)
|
|
|
.WhereIF(dto.IsCountersign != null && dto.IsCountersign == false, d => d.CounterSignType == null)
|
|
|
.WhereIF(dto.AcceptTypes.Any(), d => dto.AcceptTypes.Contains(d.AcceptType))
|
|
@@ -702,6 +701,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
|
.WhereIF(dto.FiledTimeStart.HasValue, d => d.FiledTime >= dto.FiledTimeStart)
|
|
|
.WhereIF(dto.FiledTimeEnd.HasValue, d => d.FiledTime <= dto.FiledTimeEnd)
|
|
|
.WhereIF(dto.QuerySelf.HasValue && dto.QuerySelf.Value, d => d.WaitForPublisherId == _sessionContext.RequiredUserId)
|
|
|
+ .WhereIF(dto.IdentityType != null, d => d.IdentityType == dto.IdentityType) //来电主体
|
|
|
.WhereIF(dto.IsOverTime == true,
|
|
|
d => (d.ExpiredTime < DateTime.Now && d.Status < EOrderStatus.Filed) ||
|
|
|
(d.ExpiredTime < d.ActualHandleTime && d.Status >= EOrderStatus.Filed)) //是 超期
|
|
@@ -727,10 +727,12 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.Hotspot), d => d.Order.HotspotSpliceName != null && d.Order.HotspotSpliceName.Contains(dto.Hotspot))
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.PublishName), d => d.CreatorName.Contains(dto.PublishName!))
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.NameOrNo),
|
|
|
- d => d.Order.AcceptorName == dto.NameOrNo! || d.Order.AcceptorStaffNo == dto.NameOrNo!) //受理人/坐席
|
|
|
+ d => d.Order.AcceptorName.Contains(dto.NameOrNo) || d.Order.AcceptorStaffNo.Contains(dto.NameOrNo)) //受理人/坐席
|
|
|
.WhereIF(dto.StartTime.HasValue, d => d.CreationTime >= dto.StartTime)
|
|
|
.WhereIF(dto.EndTime.HasValue, d => d.CreationTime <= dto.EndTime)
|
|
|
.WhereIF(dto.Resolve.HasValue, x => x.Resolve == dto.Resolve)
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.OrgLevelOneName), d => d.Order.OrgLevelOneName.Contains(dto.OrgLevelOneName)) //一级部门
|
|
|
+ .WhereIF(dto.IdentityType != null, d => d.Order.IdentityType == dto.IdentityType) //来电主体
|
|
|
.WhereIF(dto.IsOverTime == true,
|
|
|
d => (d.Order.ExpiredTime < DateTime.Now && d.Order.Status < EOrderStatus.Filed) ||
|
|
|
(d.Order.ExpiredTime < d.Order.ActualHandleTime && d.Order.Status >= EOrderStatus.Filed)) //是 超期
|
|
@@ -753,8 +755,8 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
|
.LeftJoin<User>((order, user) => order.WaitForPublisherId == user.Id)
|
|
|
.Where((order, user) => order.CreationTime >= dto.StartTime && order.CreationTime <= dto.EndTime &&
|
|
|
!string.IsNullOrEmpty(order.WaitForPublisherId))
|
|
|
- // .WhereIF(dto.ProcessType != null, (order, user) => order.ProcessType == dto.ProcessType)
|
|
|
- .WhereIF(dto.ProcessType != null && dto.ProcessType ==EProcessType.Zhiban, (order, user) => order.FileOrgIsCenter == true)
|
|
|
+ // .WhereIF(dto.ProcessType != null, (order, user) => order.ProcessType == dto.ProcessType)
|
|
|
+ .WhereIF(dto.ProcessType != null && dto.ProcessType == EProcessType.Zhiban, (order, user) => order.FileOrgIsCenter == true)
|
|
|
.WhereIF(dto.ProcessType != null && dto.ProcessType == EProcessType.Jiaoban, (order, user) => order.FileOrgIsCenter == false)
|
|
|
|
|
|
.GroupBy((order, user) => new { order.WaitForPublisherId, user.Name })
|
|
@@ -1793,7 +1795,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
|
{
|
|
|
bool IsCenter = _sessionContextProvider.SessionContext.OrgIsCenter;
|
|
|
|
|
|
- var list = await _systemOrganizeRepository.Queryable().Where(x => x.ParentId == dto.OrgCode)
|
|
|
+ var list = await _systemOrganizeRepository.Queryable().Where(x => x.Id.StartsWith(dto.OrgCode))
|
|
|
.LeftJoin<OrderVisitDetail>((x, it) => x.Id == it.VisitOrgCode)
|
|
|
.Where((x, it) => it.OrderVisit.VisitTime >= dto.StartTime.Value && it.OrderVisit.VisitTime <= dto.EndTime.Value &&
|
|
|
it.VisitTarget == EVisitTarget.Org && it.OrderVisit.VisitState == EVisitState.Visited)
|
|
@@ -1806,11 +1808,11 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
|
.WhereIF(dto.VisitType != null, (x, it) => it.OrderVisit.VisitType == dto.VisitType)
|
|
|
.GroupBy((x, it) => new
|
|
|
{
|
|
|
- VisitOrgCode = it.VisitOrgCode
|
|
|
+ VisitOrgCode = it.VisitOrgCode.Substring(SqlFunc.MappingColumn<int>("0"),SqlFunc.MappingColumn<int>("9"))
|
|
|
})
|
|
|
.Select((x, it) => new VisitAndOrgSatisfactionStatisticsDto()
|
|
|
{
|
|
|
- OrgCode = it.VisitOrgCode,
|
|
|
+ OrgCode = it.VisitOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("9")),
|
|
|
TotalSumCount = SqlFunc.AggregateCount(it.VisitOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("9"))),
|
|
|
VerySatisfiedCount = SqlFunc.IIF(dto.TypeId == 1,
|
|
|
SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(it.OrgProcessingResults, "Key") == "5", 1, 0)),
|
|
@@ -2839,6 +2841,66 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 回访列表
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ public ISugarQueryable<OrderVisit> QueryOrderVisitList(QueryOrderVisitDto dto)
|
|
|
+ {
|
|
|
+ var query = _orderVisitRepository.Queryable()
|
|
|
+ .Includes(d => d.Order)
|
|
|
+ .Includes(d => d.Employee)
|
|
|
+ .WhereIF(dto.VisitStateQuery == EVisitStateQuery.NoVisit,
|
|
|
+ d => d.VisitState == EVisitState.WaitForVisit ||
|
|
|
+ d.VisitState == EVisitState.NoSatisfiedWaitForVisit)
|
|
|
+ .WhereIF(dto.VisitStateQuery == EVisitStateQuery.Visited, d => d.VisitState == EVisitState.Visited)
|
|
|
+ .WhereIF(dto.VisitStateQuery == EVisitStateQuery.SMSUnsatisfied, d => d.VisitState == EVisitState.SMSUnsatisfied)
|
|
|
+ .WhereIF(dto.VisitStateQuery == EVisitStateQuery.SMSVisiting, d => d.VisitState == EVisitState.SMSVisiting)
|
|
|
+ .WhereIF(dto.VisitStateQuery == EVisitStateQuery.NoPutThrough, d => d.IsPutThrough == false && d.VisitState != EVisitState.Visited)
|
|
|
+ .WhereIF(dto.VisitStateQuery == EVisitStateQuery.ChipVoiceVisiting, d => d.VisitState == EVisitState.AiVisiting)//任务 162:回访状态快捷查询条件
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.Keyword), d => d.Order.Title.Contains(dto.Keyword!))
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.No), d => d.No == dto.No)
|
|
|
+ .WhereIF(dto.VisitType != null, d => d.VisitType == dto.VisitType)
|
|
|
+ //.WhereIF(dto.FiledType != null && dto.FiledType == FiledType.CenterFiled, d => d.Order.ProcessType == EProcessType.Zhiban)
|
|
|
+ //.WhereIF(dto.FiledType != null && dto.FiledType == FiledType.OrgFiled, d => d.Order.ProcessType == EProcessType.Jiaoban)
|
|
|
+ .WhereIF(dto.FiledType != null && dto.FiledType == FiledType.CenterFiled, d => d.Order.FileOrgIsCenter == true)
|
|
|
+ .WhereIF(dto.FiledType != null && dto.FiledType == FiledType.OrgFiled, d => d.Order.FileOrgIsCenter == false)
|
|
|
+ .WhereIF(dto.IsCountersign != null && dto.IsCountersign == true, d => d.Order.CounterSignType != null)
|
|
|
+ .WhereIF(dto.IsCountersign != null && dto.IsCountersign == false, d => d.Order.CounterSignType == null)
|
|
|
+ .WhereIF(dto.QuerySelf.HasValue && dto.QuerySelf.Value, d => d.EmployeeId == _sessionContext.RequiredUserId)
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.EmployeeName), d => !string.IsNullOrEmpty(d.EmployeeId) && d.Employee.Name.Contains(dto.EmployeeName))
|
|
|
+ .WhereIF(dto.IsProvince != null && dto.IsProvince == true, d => d.Order.IsProvince == true)
|
|
|
+ .WhereIF(dto.IsProvince != null && dto.IsProvince == false, d => d.Order.IsProvince == false)
|
|
|
+ .WhereIF(dto.IsEffectiveAiVisit != null, d => d.IsEffectiveAiVisit == dto.IsEffectiveAiVisit)
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.FromPhone), d => d.Order.FromPhone == dto.FromPhone)
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.Contact), d => d.Order.Contact == dto.Contact)
|
|
|
+ .WhereIF(dto.VoiceEvaluate.Any(), d => d.OrderVisitDetails.Any(m => dto.VoiceEvaluate.Contains(m.VoiceEvaluate.Value)))
|
|
|
+ .WhereIF(dto.SeatEvaluate.Any(), d => d.OrderVisitDetails.Any(m => dto.SeatEvaluate.Contains(m.SeatEvaluate.Value)))
|
|
|
+ .WhereIF(dto.OrgProcessingResults.Any(),
|
|
|
+ d => d.OrderVisitDetails.Any(m => dto.OrgProcessingResults.Contains(SqlFunc.JsonField(m.OrgProcessingResults, "Key"))))
|
|
|
+ .WhereIF(dto.OrgHandledAttitude.Any(),
|
|
|
+ d => d.OrderVisitDetails.Any(q => dto.OrgHandledAttitude.Contains(SqlFunc.JsonField(q.OrgHandledAttitude, "Key"))))
|
|
|
+ .WhereIF(dto.IsOverTime == true,
|
|
|
+ d => (d.Order.ExpiredTime < DateTime.Now && d.Order.Status < EOrderStatus.Filed) ||
|
|
|
+ (d.Order.ExpiredTime < d.Order.ActualHandleTime && d.Order.Status >= EOrderStatus.Filed)) //是 超期
|
|
|
+ .WhereIF(dto.IsOverTime == false,
|
|
|
+ d => (d.Order.ExpiredTime > DateTime.Now && d.Order.Status < EOrderStatus.Filed) ||
|
|
|
+ (d.Order.ExpiredTime > d.Order.ActualHandleTime && d.Order.Status >= EOrderStatus.Filed)) //否 超期
|
|
|
+ .WhereIF(dto.StartTime.HasValue, d => d.VisitTime >= dto.StartTime)
|
|
|
+ .WhereIF(dto.EndTime.HasValue, d => d.VisitTime <= dto.EndTime)
|
|
|
+ .WhereIF(dto.StartPublishTime.HasValue && dto.EndPublishTime.HasValue, d => d.PublishTime >= dto.StartPublishTime && d.PublishTime <= dto.EndPublishTime) // 发布时间
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.ActualHandleOrgName), d => d.Order.ActualHandleOrgName.Contains(dto.ActualHandleOrgName)) //接办部门
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.OrgLevelOneName), d => d.Order.OrgLevelOneName.Contains(dto.OrgLevelOneName)) //一级部门
|
|
|
+ .WhereIF(dto.IdentityType != null, d => d.Order.IdentityType == dto.IdentityType) //来电主体
|
|
|
+ .WhereIF(dto.CreationTimeStart.HasValue, d => d.Order.CreationTime >= dto.CreationTimeStart)
|
|
|
+ .WhereIF(dto.CreationTimeEnd.HasValue, d => d.Order.CreationTime <= dto.CreationTimeEnd)
|
|
|
+ .OrderByDescending(x => x.PublishTime)
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.Channel), d => d.Order.SourceChannelCode == dto.Channel)
|
|
|
+ .OrderByDescending(d => d.PublishTime);
|
|
|
+ return query;
|
|
|
+ }
|
|
|
+
|
|
|
#region private
|
|
|
/// <summary>
|
|
|
/// 接受外部工单(除省平台)
|