|
@@ -16,6 +16,9 @@ using Hotline.Share.Enums.Settings;
|
|
|
using Hotline.Tools;
|
|
|
using Hotline.Users;
|
|
|
using MapsterMapper;
|
|
|
+using MediatR;
|
|
|
+using SqlSugar;
|
|
|
+using XF.Domain.Authentications;
|
|
|
using XF.Domain.Constants;
|
|
|
using XF.Domain.Dependency;
|
|
|
using XF.Domain.Entities;
|
|
@@ -35,6 +38,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
|
private readonly IRepository<OrderWord> _orderWrodRepository;
|
|
|
private readonly IRepositoryTextSearch<OrderTs> _repositoryts;
|
|
|
private readonly IFileRepository _fileRepository;
|
|
|
+ private readonly ISessionContext _sessionContext;
|
|
|
|
|
|
public OrderApplication(
|
|
|
IOrderDomainService orderDomainService,
|
|
@@ -45,7 +49,8 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
|
IMapper mapper,
|
|
|
IRepository<OrderWord> orderWrodRepository,
|
|
|
IRepositoryTextSearch<OrderTs> repositoryts,
|
|
|
- IFileRepository fileRepository
|
|
|
+ IFileRepository fileRepository,
|
|
|
+ ISessionContext sessionContext
|
|
|
)
|
|
|
{
|
|
|
_orderDomainService = orderDomainService;
|
|
@@ -57,6 +62,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
|
_orderWrodRepository = orderWrodRepository;
|
|
|
_repositoryts = repositoryts;
|
|
|
_fileRepository = fileRepository;
|
|
|
+ _sessionContext = sessionContext;
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
@@ -75,17 +81,17 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
|
order.ExpiredTime = expiredTimeConfig.ExpiredTime;
|
|
|
order.NearlyExpiredTime = expiredTimeConfig.NearlyExpiredTime;
|
|
|
|
|
|
- //if (string.IsNullOrEmpty(order.WorkflowId))
|
|
|
- // throw new UserFriendlyException("该工单流程id异常");
|
|
|
- //var workflow = await _workflowDomainService.GetWorkflowAsync(order.WorkflowId, cancellationToken: cancellationToken);
|
|
|
- //await _workflowDomainService.UpdateExpiredTimeAsync(workflow, expiredTimeConfig.ExpiredTime,
|
|
|
- // expiredTimeConfig.TimeText, expiredTimeConfig.Count, expiredTimeConfig.TimeType, expiredTimeConfig.NearlyExpiredTime, cancellationToken);
|
|
|
+ //if (string.IsNullOrEmpty(order.WorkflowId))
|
|
|
+ // throw new UserFriendlyException("该工单流程id异常");
|
|
|
+ //var workflow = await _workflowDomainService.GetWorkflowAsync(order.WorkflowId, cancellationToken: cancellationToken);
|
|
|
+ //await _workflowDomainService.UpdateExpiredTimeAsync(workflow, expiredTimeConfig.ExpiredTime,
|
|
|
+ // expiredTimeConfig.TimeText, expiredTimeConfig.Count, expiredTimeConfig.TimeType, expiredTimeConfig.NearlyExpiredTime, cancellationToken);
|
|
|
|
|
|
- if (string.IsNullOrEmpty(order.WorkflowId))
|
|
|
- throw new UserFriendlyException("该工单流程id异常");
|
|
|
- await _workflowDomainService.UpdateUnhandleExpiredTimeAsync(order.WorkflowId, expiredTimeConfig.ExpiredTime, cancellationToken);
|
|
|
+ if (string.IsNullOrEmpty(order.WorkflowId))
|
|
|
+ throw new UserFriendlyException("该工单流程id异常");
|
|
|
+ await _workflowDomainService.UpdateUnhandleExpiredTimeAsync(order.WorkflowId, expiredTimeConfig.ExpiredTime, cancellationToken);
|
|
|
|
|
|
- await _orderRepository.UpdateAsync(order, cancellationToken);
|
|
|
+ await _orderRepository.UpdateAsync(order, cancellationToken);
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
@@ -263,22 +269,22 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- public async Task OrderSensitiveParticiple(string inputStr, string orderId, CancellationToken cancellationToken)
|
|
|
+ public async Task OrderSensitiveParticiple(string inputStr, string orderId, CancellationToken cancellationToken)
|
|
|
{
|
|
|
- var words = await _orderWrodRepository.Queryable().Where(x => x.IsEnable == 1 && x.Classify.Contains("敏感标签")).Select(x => x.Tag).ToListAsync(cancellationToken);
|
|
|
- var res = new List<string>();
|
|
|
- if (words.Any()) res = ParticipleTool.SegMMDouble(inputStr, ref words);
|
|
|
- if (res.Any())
|
|
|
+ var words = await _orderWrodRepository.Queryable().Where(x => x.IsEnable == 1 && x.Classify.Contains("敏感标签")).Select(x => x.Tag).ToListAsync(cancellationToken);
|
|
|
+ var res = new List<string>();
|
|
|
+ if (words.Any()) res = ParticipleTool.SegMMDouble(inputStr, ref words);
|
|
|
+ if (res.Any())
|
|
|
{
|
|
|
var intersect = words.Intersect(res).ToList();
|
|
|
- await _orderRepository.Updateable().SetColumns(o=> new Order() { Sensitive = intersect }).Where(o=>o.Id == orderId).ExecuteCommandAsync(cancellationToken);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /// <summary>
|
|
|
- /// 接收外部平台工单
|
|
|
- /// </summary>
|
|
|
- public Task<AddOrderResponse> ReceiveOrderFromExternalAsync(AddOrderDto dto, CancellationToken cancellationToken)
|
|
|
+ await _orderRepository.Updateable().SetColumns(o => new Order() { Sensitive = intersect }).Where(o => o.Id == orderId).ExecuteCommandAsync(cancellationToken);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 接收外部平台工单
|
|
|
+ /// </summary>
|
|
|
+ public Task<AddOrderResponse> ReceiveOrderFromExternalAsync(AddOrderDto dto, CancellationToken cancellationToken)
|
|
|
{
|
|
|
switch (dto.Source)
|
|
|
{
|
|
@@ -313,6 +319,51 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ public ISugarQueryable<Order> QueryOrders(QueryOrderDto dto)
|
|
|
+ {
|
|
|
+ var isCenter = _sessionContext.OrgIsCenter;
|
|
|
+
|
|
|
+ return _orderRepository.Queryable(viewFilter: isCenter ? false : true)
|
|
|
+ .Includes(x => x.OrderScreens)
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.Keyword), d => d.Title.Contains(dto.Keyword!)) //标题
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.ProvinceNo), d => d.ProvinceNo.Contains(dto.ProvinceNo)) //省本地编号
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.No), d => d.No.Contains(dto.No)) //工单编码
|
|
|
+ //.WhereIF(!string.IsNullOrEmpty(dto.Content), d => d.Content.Contains(dto.Content!))
|
|
|
+ .WhereIF(dto.AcceptTypes.Any(), d => dto.AcceptTypes.Contains(d.AcceptTypeCode)) //受理类型
|
|
|
+ .WhereIF(dto.Channels.Any(), d => dto.Channels.Contains(d.SourceChannelCode)) //来源渠道
|
|
|
+ .WhereIF(dto.HotspotIds.Any(), d => dto.HotspotIds.Contains(d.HotspotId)) //热点类型
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.TransferPhone), d => d.TransferPhone.Contains(dto.TransferPhone!)) //转接号码
|
|
|
+ //.WhereIF(dto.OrgCodes.Any(), d => d.Workflow.Assigns.Any(s => dto.OrgCodes.Contains(s.OrgCode)))
|
|
|
+ .WhereIF(dto.OrgCodes.Any(), d => dto.OrgCodes.Contains(d.ActualHandleOrgCode)) //接办部门
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.NameOrNo), d => d.AcceptorName.Contains(dto.NameOrNo!) || d.AcceptorStaffNo.Contains(dto.NameOrNo!)) //受理人/坐席
|
|
|
+ .WhereIF(dto.CreationTimeStart.HasValue, d => d.CreationTime >= dto.CreationTimeStart) //受理时间开始
|
|
|
+ .WhereIF(dto.CreationTimeEnd.HasValue, d => d.CreationTime <= dto.CreationTimeEnd) //受理时间结束
|
|
|
+ .WhereIF(dto.EmergencyLevels.Any(), d => dto.EmergencyLevels.Contains(d.EmergencyLevel)) //紧急程度
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.FromPhone), d => d.FromPhone.Contains(dto.FromPhone)) //来电号码
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.PhoneNo), d => d.Contact.Contains(dto.PhoneNo!)) //联系电话
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.PushTypeCode), d => d.PushTypeCode == dto.PushTypeCode) //推送分类
|
|
|
+ .WhereIF(dto.ExpiredTimeStart.HasValue, d => d.ExpiredTime >= dto.ExpiredTimeStart) //超期时间开始
|
|
|
+ .WhereIF(dto.ExpiredTimeEnd.HasValue, d => d.ExpiredTime <= dto.ExpiredTimeEnd) //超期时间结束
|
|
|
+ .WhereIF(dto.Statuses.Any(), d => dto.Statuses.Contains(d.Status)) //工单状态
|
|
|
+ .WhereIF(dto.Statuses.Any(d => d == EOrderStatus.SpecialToUnAccept), d => d.Status <= EOrderStatus.SpecialToUnAccept)
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.ActualHandlerName), d => d.ActualHandlerName.Contains(dto.ActualHandlerName)) //接办人
|
|
|
+ .WhereIF(dto.IsScreen == true, d => d.OrderScreens.Any(x => x.Status != EScreenStatus.Refuse)) //有甄别
|
|
|
+ .WhereIF(dto.IsScreen == false, d => !d.OrderScreens.Any(x => x.Status != EScreenStatus.Refuse)) //无甄别
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.CurrentStepCode), d => d.ActualHandleStepCode == dto.CurrentStepCode) //当前办理节点
|
|
|
+ .WhereIF(dto.ActualHandleTimeStart.HasValue, d => d.ActualHandleTime >= dto.ActualHandleTimeStart) //办结时间开始
|
|
|
+ .WhereIF(dto.ActualHandleTimeEnd.HasValue, d => d.ActualHandleTime <= dto.ActualHandleTimeEnd) //办结时间结束
|
|
|
+ .WhereIF(dto.IsOverTime == true, d => (d.ExpiredTime < DateTime.Now && d.Status < EOrderStatus.Filed) || (d.ExpiredTime < d.ActualHandleTime && d.Status >= EOrderStatus.Filed)) //是 超期
|
|
|
+ .WhereIF(dto.IsOverTime == false, d => (d.ExpiredTime > DateTime.Now && d.Status < EOrderStatus.Filed) || (d.ExpiredTime > d.ActualHandleTime && d.Status >= EOrderStatus.Filed)) //否 超期
|
|
|
+ .WhereIF(dto.IdentityType != null, d => d.IdentityType == dto.IdentityType) //来电主体
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.FromName), d => d.FromName.Contains(dto.FromName)) //来电人姓名
|
|
|
+ .WhereIF(dto.AreaCodes.Any(), d => dto.AreaCodes.Contains(d.AreaCode)) //区域
|
|
|
+ .WhereIF(dto.IsProvinceOrder.HasValue && dto.IsProvinceOrder == true, x => x.IsProvince == true)
|
|
|
+ .WhereIF(dto.IsProvinceOrder.HasValue && dto.IsProvinceOrder == false, x => x.IsProvince == false)
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.SensitiveWord), x => SqlFunc.JsonArrayAny(x.Sensitive, dto.SensitiveWord))
|
|
|
+ .WhereIF(dto.IsSensitiveWord.HasValue && dto.IsSensitiveWord == true, x => x.Sensitive != null && SqlFunc.JsonArrayLength(x.Sensitive) > 0)
|
|
|
+ .OrderByDescending(d => d.CreationTime);
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
#region private
|
|
|
|