|
@@ -1,4 +1,6 @@
|
|
|
using DocumentFormat.OpenXml.Drawing.Diagrams;
|
|
|
+using DocumentFormat.OpenXml.Office.CustomUI;
|
|
|
+using DocumentFormat.OpenXml.Office2010.CustomUI;
|
|
|
using DocumentFormat.OpenXml.Spreadsheet;
|
|
|
using DotNetCore.CAP;
|
|
|
using FluentValidation;
|
|
@@ -57,6 +59,7 @@ using PanGu;
|
|
|
using SqlSugar;
|
|
|
using System.Data;
|
|
|
using System.Dynamic;
|
|
|
+using System.Threading;
|
|
|
using XF.Domain.Authentications;
|
|
|
using XF.Domain.Dependency;
|
|
|
using XF.Domain.Exceptions;
|
|
@@ -118,8 +121,9 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
|
private readonly ISessionContextManager _sessionContextManager;
|
|
|
private readonly IOrderVisitApplication _orderVisitApplication;
|
|
|
private readonly IRepository<OrderVisitDetailCopy> _orderVisitDetailCopyRepository;
|
|
|
+ private readonly IRepository<OrderDelayAutomatic> _orderDelayAutomaticRepository;
|
|
|
|
|
|
- public OrderApplication(
|
|
|
+ public OrderApplication(
|
|
|
IOrderDomainService orderDomainService,
|
|
|
IOrderRepository orderRepository,
|
|
|
IWorkflowDomainService workflowDomainService,
|
|
@@ -170,8 +174,9 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
|
ISessionContextManager sessionContextManager,
|
|
|
IOrderVisitApplication orderVisitApplication,
|
|
|
IRepository<Role> roleRepository,
|
|
|
- IRepository<OrderVisitDetailCopy> orderVisitDetailCopyRepository
|
|
|
- )
|
|
|
+ IRepository<OrderVisitDetailCopy> orderVisitDetailCopyRepository,
|
|
|
+ IRepository<OrderDelayAutomatic> orderDelayAutomaticRepository
|
|
|
+ )
|
|
|
{
|
|
|
_orderDomainService = orderDomainService;
|
|
|
_workflowDomainService = workflowDomainService;
|
|
@@ -223,7 +228,8 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
|
_orderVisitApplication = orderVisitApplication;
|
|
|
_roleRepository = roleRepository;
|
|
|
_orderVisitDetailCopyRepository = orderVisitDetailCopyRepository;
|
|
|
- }
|
|
|
+ _orderDelayAutomaticRepository = orderDelayAutomaticRepository;
|
|
|
+ }
|
|
|
|
|
|
/// <summary>
|
|
|
/// 更新工单办理期满时间(延期调用,其他不调用)
|
|
@@ -767,8 +773,15 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
|
{
|
|
|
List<FileJson> file = order.FileJson;
|
|
|
List<FileJson> fileNew = await _fileRepository.AddFileAsync(dto.Files, order.Id, cancellationToken);
|
|
|
- file.AddRange(fileNew);
|
|
|
- order.FileJson = file;
|
|
|
+ if (file != null)
|
|
|
+ {
|
|
|
+ file.AddRange(fileNew);
|
|
|
+ order.FileJson = file;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ order.FileJson = fileNew;
|
|
|
+ }
|
|
|
await _orderRepository.UpdateAsync(order, cancellationToken);
|
|
|
}
|
|
|
}
|
|
@@ -2431,7 +2444,13 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
|
.Select((o, w) => new Order { DaysOverdueOrgName = w.HandlerOrgName, Id = o.Id.SelectAll() });
|
|
|
quer = _orderRepository.UnionAll(quer, queryCountersignOrder).MergeTable()
|
|
|
.InnerJoin<SystemOrganize>((x, so) => x.ActualHandleOrgCode == so.Id)
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.No), (x, so) => x.No == dto.No);
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.No), (x, so) => x.No == dto.No)
|
|
|
+ .OrderByIF(dto is { SortField: "startTime", SortRule: 0 }, x => x.StartTime, OrderByType.Asc)
|
|
|
+ .OrderByIF(dto is { SortField: "startTime", SortRule: 1 }, x => x.StartTime, OrderByType.Desc)
|
|
|
+ .OrderByIF(dto is { SortField: "filedTime", SortRule: 0 }, x => x.FiledTime, OrderByType.Asc)
|
|
|
+ .OrderByIF(dto is { SortField: "filedTime", SortRule: 1 }, x => x.FiledTime, OrderByType.Desc)
|
|
|
+ .OrderByIF(dto is { SortField: "expiredTime", SortRule: 0 }, x => x.FiledTime, OrderByType.Asc)
|
|
|
+ .OrderByIF(dto is { SortField: "expiredTime", SortRule: 1 }, x => x.FiledTime, OrderByType.Desc);
|
|
|
return quer;
|
|
|
}
|
|
|
|
|
@@ -5489,6 +5508,10 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
|
/// <returns></returns>
|
|
|
public async Task<List<SendOrderReportOutDto>> SendOrderReportAsync(QuerySendOrderRequest dto)
|
|
|
{
|
|
|
+ if (_appOptions.Value.IsLuZhou)
|
|
|
+ {
|
|
|
+ return await SendOrderReportAsync_LZ(dto);
|
|
|
+ }
|
|
|
var itemsHandled = _workflowTraceRepository.Queryable()
|
|
|
.LeftJoin<Workflow>((x, w) => x.WorkflowId == w.Id)
|
|
|
.InnerJoin<SchedulingUser>((x, w, su) => x.HandlerId == su.UserId)
|
|
@@ -5577,13 +5600,186 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
|
return res;
|
|
|
}
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 泸州派单量统计
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ public async Task<List<SendOrderReportOutDto>> SendOrderReportAsync_LZ(QuerySendOrderRequest dto)
|
|
|
+ {
|
|
|
+ var itemsHandled = _workflowTraceRepository.Queryable()
|
|
|
+ .LeftJoin<Workflow>((x, w) => x.WorkflowId == w.Id)
|
|
|
+ .Where((x, w) => w.ModuleCode == "OrderHandle" && x.BusinessType == EBusinessType.Send && x.Status == EWorkflowStepStatus.Handled && (x.Name =="派单组" || x.Name == "班长审批"))
|
|
|
+ .Where((x, w) => x.HandleTime >= dto.StartTime.Value)
|
|
|
+ .Where((x, w) => x.HandleTime <= dto.EndTime.Value)
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.UserName), (x, w) => x.HandlerName == dto.UserName)
|
|
|
+ .GroupBy((x, w) => new { x.HandlerId,x.HandlerName,x.Name})
|
|
|
+ .Select((x, w) => new BiOrderSendVo
|
|
|
+ {
|
|
|
+ UserId = x.HandlerId,
|
|
|
+ UserName = x.HandlerName,
|
|
|
+ StepName = x.Name,
|
|
|
+ SendOrderNum = SqlFunc.AggregateDistinctCount(w.ExternalId),
|
|
|
+ NoSendOrderNum = 0,
|
|
|
+ ReSendOrderNum = 0,
|
|
|
+ });
|
|
|
+ var itemsNo = _workflowTraceRepository.Queryable()
|
|
|
+ .LeftJoin<Workflow>((x, w) => x.WorkflowId == w.Id)
|
|
|
+ .Where((x, w) => w.ModuleCode == "OrderHandle" && x.BusinessType == EBusinessType.Send && x.Status != EWorkflowStepStatus.Handled && (x.Name == "派单组" || x.Name == "班长审批"))
|
|
|
+ .Where((x, w) => x.CreationTime >= dto.StartTime.Value)
|
|
|
+ .Where((x, w) => x.CreationTime <= dto.EndTime.Value)
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.UserName), (x, w) => x.HandlerName == dto.UserName)
|
|
|
+ .GroupBy((x, w) => new { x.HandlerId, x.HandlerName, x.Name })
|
|
|
+ .Select((x, w) => new BiOrderSendVo
|
|
|
+ {
|
|
|
+ UserId = x.HandlerId,
|
|
|
+ UserName = x.HandlerName,
|
|
|
+ StepName = x.Name,
|
|
|
+ SendOrderNum = 0,
|
|
|
+ ReSendOrderNum =0,
|
|
|
+ NoSendOrderNum = SqlFunc.AggregateDistinctCount(w.ExternalId),
|
|
|
+ });
|
|
|
+
|
|
|
+ var items2 = _workflowTraceRepository.Queryable()
|
|
|
+ .LeftJoin<Workflow>((x, w) => x.WorkflowId == w.Id)
|
|
|
+ .Where((x, w) => w.ModuleCode == WorkflowModuleConsts.OrderHandle && x.BusinessType == EBusinessType.Send &&
|
|
|
+ x.Status == EWorkflowStepStatus.Handled
|
|
|
+ && !string.IsNullOrEmpty(x.NextMainHandler) && x.NextMainHandler != OrgSeedData.CenterId && (x.Name == "派单组" || x.Name == "班长审批"))
|
|
|
+ .Where((x, w) => x.CreationTime >= dto.StartTime.Value)
|
|
|
+ .Where((x, w) => x.CreationTime <= dto.EndTime.Value)
|
|
|
+ .GroupBy((x, w) => x.WorkflowId)
|
|
|
+ .Having((x, w) => SqlFunc.AggregateCount(x.WorkflowId) > 1)
|
|
|
+ .Select((x, w) => new { Id = x.WorkflowId, CreationTime = SqlFunc.AggregateMin(x.CreationTime) })
|
|
|
+ .MergeTable()
|
|
|
+ .LeftJoin<WorkflowTrace>((a, wt) => a.Id == wt.WorkflowId)
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.UserName), ((a, wt) => wt.HandlerName == dto.UserName))
|
|
|
+ .GroupBy((a, wt) => new { wt.HandlerId, wt.HandlerName ,wt.Name })
|
|
|
+ .Select((a, wt) => new BiOrderSendVo
|
|
|
+ {
|
|
|
+ UserId = wt.HandlerId,
|
|
|
+ UserName = wt.HandlerName,
|
|
|
+ StepName = wt.Name,
|
|
|
+ SendOrderNum = 0,
|
|
|
+ NoSendOrderNum = 0,
|
|
|
+ ReSendOrderNum = SqlFunc.AggregateDistinctCount(wt.ExternalId),
|
|
|
+ });
|
|
|
+
|
|
|
+ var items = await _orderRepository.UnionAll(itemsHandled, itemsNo, itemsHandled)
|
|
|
+ .GroupBy(x => new { x.UserId, x.UserName, x.StepName })
|
|
|
+ .Select(x => new BiOrderSendVo
|
|
|
+ {
|
|
|
+ UserId = x.UserId,
|
|
|
+ UserName = x.UserName,
|
|
|
+ StepName = x.StepName,
|
|
|
+ SendOrderNum = SqlFunc.AggregateSum(x.SendOrderNum),
|
|
|
+ NoSendOrderNum = SqlFunc.AggregateSum(x.NoSendOrderNum),
|
|
|
+ ReSendOrderNum = SqlFunc.AggregateSum(x.ReSendOrderNum)
|
|
|
+ }).ToListAsync();
|
|
|
+ var res = items.Select(p=> new SendOrderReportOutDto {
|
|
|
+ UserId =p.UserId,
|
|
|
+ UserName = p.UserName,
|
|
|
+ StepName = p.StepName,
|
|
|
+ SendOrderNum = p.SendOrderNum,
|
|
|
+ NoSendOrderNum = p.NoSendOrderNum,
|
|
|
+ ReSendOrderNum = p.ReSendOrderNum,
|
|
|
+ ChainRate = p.AccuracyRate
|
|
|
+ }).ToList();
|
|
|
+ return res;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public ISugarQueryable<Order> QuerySendOrderDetail(QuerySendOrderDetailRequest dto)
|
|
|
+ {
|
|
|
+ if (_appOptions.Value.IsLuZhou)
|
|
|
+ {
|
|
|
+ return QuerySendOrderDetail_LZ(dto);
|
|
|
|
|
|
- /// <summary>
|
|
|
- /// 扭转信件统计
|
|
|
- /// </summary>
|
|
|
- /// <param name="dto"></param>
|
|
|
- /// <returns></returns>
|
|
|
- public ISugarQueryable<OrderVisitJudeStatisticsRep> OrderVisitJudeStatistics(OrderVisitJudeStatisticsReq dto)
|
|
|
+ }
|
|
|
+ if (dto.TitleCode.ToUpper() == "RESENDORDERNUM")
|
|
|
+ {
|
|
|
+ var query = _workflowTraceRepository.Queryable()
|
|
|
+ .LeftJoin<Workflow>((x, w) => x.WorkflowId == w.Id)
|
|
|
+ .InnerJoin<SchedulingUser>((x, w, su) => x.HandlerId == su.UserId)
|
|
|
+ .Where((x, w, su) => w.ModuleCode == "OrderHandle" && x.BusinessType == EBusinessType.Send && x.Status == EWorkflowStepStatus.Handled
|
|
|
+ && !string.IsNullOrEmpty(x.NextMainHandler) && x.NextMainHandler != OrgSeedData.CenterId)
|
|
|
+ .Where((x, w, su) => x.CreationTime >= dto.StartTime.Value)
|
|
|
+ .Where((x, w, su) => x.CreationTime <= dto.EndTime.Value)
|
|
|
+ .GroupBy((x, w, su) => x.WorkflowId)
|
|
|
+ .Having((x, w, su) => SqlFunc.AggregateCount(x.WorkflowId) > 1)
|
|
|
+ .Select((x, w, su) => new { Id = x.WorkflowId, CreationTime = SqlFunc.AggregateMin(x.CreationTime) })
|
|
|
+ .MergeTable()
|
|
|
+ .LeftJoin<WorkflowTrace>((a, wt) => a.Id == wt.WorkflowId)
|
|
|
+ .LeftJoin<Workflow>((a, wt, wf) => wt.WorkflowId == wf.Id)
|
|
|
+ .InnerJoin<SchedulingUser>((a, wt, wf, su) => wt.HandlerId == su.UserId)
|
|
|
+ .Where((a, wt, wf, su) => su.UserId == dto.UserId)
|
|
|
+ .GroupBy((a, wt, wf, su) => wf.ExternalId)
|
|
|
+ .Select((a, wt, wf, su) => new { Id = wf.ExternalId })
|
|
|
+ .MergeTable()
|
|
|
+ .LeftJoin<Order>((a, b) => a.Id == b.Id)
|
|
|
+ .Select((a, b) => b);
|
|
|
+ return query;
|
|
|
+ }
|
|
|
+ var query2 = _workflowTraceRepository.Queryable()
|
|
|
+ .InnerJoin<SchedulingUser>((x, su) => x.HandlerId == su.UserId)
|
|
|
+ .Where((x, su) => x.ModuleCode == "OrderHandle" && x.BusinessType == EBusinessType.Send)
|
|
|
+ .Where((x, su) => x.CreationTime >= dto.StartTime.Value && x.CreationTime <= dto.EndTime.Value && su.UserId == dto.UserId)
|
|
|
+ .WhereIF(dto.TitleCode.ToUpper() == "NOSENDORDERNUM", (x, su) => x.Status != EWorkflowStepStatus.Handled)
|
|
|
+ .WhereIF(dto.TitleCode.ToUpper() == "SENDORDERNUM", (x, su) => x.Status == EWorkflowStepStatus.Handled)
|
|
|
+ .GroupBy((x, su) => x.ExternalId)
|
|
|
+ .Select((x, su) => new { Id = x.ExternalId })
|
|
|
+ .MergeTable()
|
|
|
+ .LeftJoin<Order>((a, b) => a.Id == b.Id)
|
|
|
+ .Select((a, b) => b);
|
|
|
+ return query2;
|
|
|
+ }
|
|
|
+
|
|
|
+ public ISugarQueryable<Order> QuerySendOrderDetail_LZ(QuerySendOrderDetailRequest dto)
|
|
|
+ {
|
|
|
+ if (dto.TitleCode.ToUpper() == "RESENDORDERNUM")
|
|
|
+ {
|
|
|
+ var query = _workflowTraceRepository.Queryable()
|
|
|
+ .LeftJoin<Workflow>((x, w) => x.WorkflowId == w.Id)
|
|
|
+ .Where((x, w) => w.ModuleCode == "OrderHandle" && x.BusinessType == EBusinessType.Send && x.Status == EWorkflowStepStatus.Handled
|
|
|
+ && !string.IsNullOrEmpty(x.NextMainHandler) && x.NextMainHandler != OrgSeedData.CenterId && (x.Name == "派单组" || x.Name == "班长审批"))
|
|
|
+ .Where((x, w) => x.CreationTime >= dto.StartTime.Value)
|
|
|
+ .Where((x, w) => x.CreationTime <= dto.EndTime.Value)
|
|
|
+ .WhereIF(dto.RoleName is "派单员", (x, w) => x.Name == "派单组")
|
|
|
+ .WhereIF(dto.RoleName is "中心班长", (x, w) => x.Name == "班长审批")
|
|
|
+ .GroupBy((x, w) => x.WorkflowId)
|
|
|
+ .Having((x, w) => SqlFunc.AggregateCount(x.WorkflowId) > 1)
|
|
|
+ .Select((x, w) => new { Id = x.WorkflowId, CreationTime = SqlFunc.AggregateMin(x.CreationTime) })
|
|
|
+ .MergeTable()
|
|
|
+ .LeftJoin<WorkflowTrace>((a, wt) => a.Id == wt.WorkflowId)
|
|
|
+ .LeftJoin<Workflow>((a, wt, wf) => wt.WorkflowId == wf.Id)
|
|
|
+ .Where((a, wt, wf) => wt.HandlerId == dto.UserId)
|
|
|
+ .GroupBy((a, wt, wf) => wf.ExternalId)
|
|
|
+ .Select((a, wt, wf) => new { Id = wf.ExternalId })
|
|
|
+ .MergeTable()
|
|
|
+ .LeftJoin<Order>((a, b) => a.Id == b.Id)
|
|
|
+ .Select((a, b) => b);
|
|
|
+ return query;
|
|
|
+ }
|
|
|
+ var query2 = _workflowTraceRepository.Queryable()
|
|
|
+ .Where(x => x.ModuleCode == "OrderHandle" && x.BusinessType == EBusinessType.Send && (x.Name == "派单组" || x.Name == "班长审批"))
|
|
|
+ .Where(x => x.CreationTime >= dto.StartTime.Value && x.CreationTime <= dto.EndTime.Value && x.HandlerId == dto.UserId)
|
|
|
+ .WhereIF(dto.TitleCode.ToUpper() == "NOSENDORDERNUM", x => x.Status != EWorkflowStepStatus.Handled)
|
|
|
+ .WhereIF(dto.TitleCode.ToUpper() == "SENDORDERNUM", x => x.Status == EWorkflowStepStatus.Handled)
|
|
|
+ .WhereIF(dto.RoleName is "派单员", x => x.Name == "派单组")
|
|
|
+ .WhereIF(dto.RoleName is "中心班长", x => x.Name == "班长审批")
|
|
|
+ .GroupBy(x => x.ExternalId)
|
|
|
+ .Select(x => new { Id = x.ExternalId })
|
|
|
+ .MergeTable()
|
|
|
+ .LeftJoin<Order>((a, b) => a.Id == b.Id)
|
|
|
+ .Select((a, b) => b);
|
|
|
+ return query2;
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 扭转信件统计
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ public ISugarQueryable<OrderVisitJudeStatisticsRep> OrderVisitJudeStatistics(OrderVisitJudeStatisticsReq dto)
|
|
|
{
|
|
|
if (!dto.EndTime.HasValue)
|
|
|
{
|
|
@@ -6558,15 +6754,15 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
|
//.GroupBy((x, o) => new { o.AcceptorId})
|
|
|
//.Select((x, o) => new { UserId = o.AcceptorId, SendOrderBackNum = SqlFunc.AggregateDistinctCount(x.ExternalId), SendOrderBackNumber = SqlFunc.AggregateCount(x.ExternalId) });
|
|
|
var sendBack = _orderSendBackAuditRepository.Queryable()
|
|
|
- .LeftJoin<Order>((x, o) => x.OrderId == o.Id)
|
|
|
- .Where((x, o) => (x.SendBackStepName == "话务部") && o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime)
|
|
|
- .GroupBy((x, o) => new { o.AcceptorId })
|
|
|
- .Select((x, o) => new SeatSendBackStatisticsVo { UserId = o.AcceptorId, SendOrderBackNum = SqlFunc.AggregateDistinctCount(x.OrderId), SendOrderBackNumber = SqlFunc.AggregateCount(x.Id) });
|
|
|
+ .LeftJoin<Order>((x, o) => x.OrderId == o.Id)
|
|
|
+ .Where((x, o) => (x.SendBackStepName == "话务部") && o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime)
|
|
|
+ .GroupBy((x, o) => new { o.AcceptorId })
|
|
|
+ .Select((x, o) => new SeatSendBackStatisticsVo { UserId = o.AcceptorId, SendOrderBackNum = SqlFunc.AggregateDistinctCount(x.OrderId), SendOrderBackNumber = SqlFunc.AggregateCount(x.Id) });
|
|
|
|
|
|
|
|
|
- var filed = _orderRepository.Queryable()
|
|
|
- .Where(x=> x.CreationTime >= dto.StartTime && x.CreationTime <= dto.EndTime && x.Status >= EOrderStatus.Filed && x.FileOrgIsCenter == true && x.FileUserRole == EFileUserType.Seat)
|
|
|
- .GroupBy(x=>x.AcceptorId)
|
|
|
+ var filed = _orderRepository.Queryable()
|
|
|
+ .Where(x => x.CreationTime >= dto.StartTime && x.CreationTime <= dto.EndTime && x.Status >= EOrderStatus.Filed && x.FileOrgIsCenter == true && x.FileUserRole == EFileUserType.Seat)
|
|
|
+ .GroupBy(x => x.AcceptorId)
|
|
|
.Select(x => new SeatSendBackStatisticsVo { UserId = x.AcceptorId, CentreFileNum = SqlFunc.AggregateDistinctCount(x.Id) });
|
|
|
|
|
|
var back = _orderSpecialRepository.Queryable()
|
|
@@ -6625,97 +6821,97 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
|
}
|
|
|
else if (dto.StatisticsType == "sendOrderBackNum")
|
|
|
{
|
|
|
- var query = _orderRepository.Queryable().Where(x => x.CreationTime >= dto.StartTime && x.CreationTime <= dto.EndTime )
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.UserId), x => x.AcceptorId == dto.UserId)
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.No), x => x.No.Contains(dto.No!))
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.Title), x => x.Title.Contains(dto.Title!))
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.AcceptType), x => x.AcceptTypeCode == dto.AcceptType) //受理类型
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.Channel), x => x.SourceChannelCode == dto.Channel) //来源渠道
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.Hotspot),
|
|
|
- x => x.HotspotSpliceName != null && x.HotspotSpliceName.Contains(dto.Hotspot)) //热点分类
|
|
|
- .Where(x => SqlFunc.Subqueryable<OrderSendBackAudit>().Where(os => os.OrderId == x.Id && (os.SendBackStepName == "话务部")).Any())
|
|
|
- .Select(x => new OrderDto() { Id = x.Id.SelectAll() })
|
|
|
- .OrderByIF(dto is { SortField: "startTime", SortRule: 0 }, x => x.StartTime, OrderByType.Asc)
|
|
|
- .OrderByIF(dto is { SortField: "startTime", SortRule: 1 }, x => x.StartTime, OrderByType.Desc)
|
|
|
- .OrderByIF(dto is { SortField: "filedTime", SortRule: 0 }, x => x.FiledTime, OrderByType.Asc)
|
|
|
- .OrderByIF(dto is { SortField: "filedTime", SortRule: 1 }, x => x.FiledTime, OrderByType.Desc)
|
|
|
- .OrderByIF(dto is { SortField: "sendBackAuditTime", SortRule: 0 }, x => x.SendBackAuditTime, OrderByType.Asc)
|
|
|
- .OrderByIF(dto is { SortField: "sendBackAuditTime", SortRule: 1 }, x => x.SendBackAuditTime, OrderByType.Desc);
|
|
|
- return query;
|
|
|
- }
|
|
|
- else if (dto.StatisticsType == "sendOrderBackNumber")
|
|
|
- {
|
|
|
- var query = _orderRepository.Queryable()
|
|
|
- .LeftJoin<OrderSendBackAudit>((x, os) => x.Id == os.OrderId && (os.SendBackStepName == "话务部"))
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.No), (x, os) => x.No.Contains(dto.No!))
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.Title), (x, os) => x.Title.Contains(dto.Title!))
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.AcceptType), (x, os) => x.AcceptTypeCode == dto.AcceptType) //受理类型
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.Channel), (x, os) => x.SourceChannelCode == dto.Channel) //来源渠道
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.Hotspot),
|
|
|
- (x, os) => x.HotspotSpliceName != null && x.HotspotSpliceName.Contains(dto.Hotspot)) //热点分类
|
|
|
- .Where((x, os) => x.CreationTime >= dto.StartTime && x.CreationTime <= dto.EndTime)
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.UserId), (x, os) => x.AcceptorId == dto.UserId)
|
|
|
- .Select((x, os) => new OrderDto() { Id = x.Id.SelectAll(), SendBackOpinion = os.Content, SendBackAuditTime = os.AuditTime })
|
|
|
+ var query = _orderRepository.Queryable().Where(x => x.CreationTime >= dto.StartTime && x.CreationTime <= dto.EndTime)
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.UserId), x => x.AcceptorId == dto.UserId)
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.No), x => x.No.Contains(dto.No!))
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.Title), x => x.Title.Contains(dto.Title!))
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.AcceptType), x => x.AcceptTypeCode == dto.AcceptType) //受理类型
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.Channel), x => x.SourceChannelCode == dto.Channel) //来源渠道
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.Hotspot),
|
|
|
+ x => x.HotspotSpliceName != null && x.HotspotSpliceName.Contains(dto.Hotspot)) //热点分类
|
|
|
+ .Where(x => SqlFunc.Subqueryable<OrderSendBackAudit>().Where(os => os.OrderId == x.Id && (os.SendBackStepName == "话务部")).Any())
|
|
|
+ .Select(x => new OrderDto() { Id = x.Id.SelectAll() })
|
|
|
+ .OrderByIF(dto is { SortField: "startTime", SortRule: 0 }, x => x.StartTime, OrderByType.Asc)
|
|
|
+ .OrderByIF(dto is { SortField: "startTime", SortRule: 1 }, x => x.StartTime, OrderByType.Desc)
|
|
|
+ .OrderByIF(dto is { SortField: "filedTime", SortRule: 0 }, x => x.FiledTime, OrderByType.Asc)
|
|
|
+ .OrderByIF(dto is { SortField: "filedTime", SortRule: 1 }, x => x.FiledTime, OrderByType.Desc)
|
|
|
+ .OrderByIF(dto is { SortField: "sendBackAuditTime", SortRule: 0 }, x => x.SendBackAuditTime, OrderByType.Asc)
|
|
|
+ .OrderByIF(dto is { SortField: "sendBackAuditTime", SortRule: 1 }, x => x.SendBackAuditTime, OrderByType.Desc);
|
|
|
+ return query;
|
|
|
+ }
|
|
|
+ else if (dto.StatisticsType == "sendOrderBackNumber")
|
|
|
+ {
|
|
|
+ var query = _orderRepository.Queryable()
|
|
|
+ .LeftJoin<OrderSendBackAudit>((x, os) => x.Id == os.OrderId && (os.SendBackStepName == "话务部"))
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.No), (x, os) => x.No.Contains(dto.No!))
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.Title), (x, os) => x.Title.Contains(dto.Title!))
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.AcceptType), (x, os) => x.AcceptTypeCode == dto.AcceptType) //受理类型
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.Channel), (x, os) => x.SourceChannelCode == dto.Channel) //来源渠道
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.Hotspot),
|
|
|
+ (x, os) => x.HotspotSpliceName != null && x.HotspotSpliceName.Contains(dto.Hotspot)) //热点分类
|
|
|
+ .Where((x, os) => x.CreationTime >= dto.StartTime && x.CreationTime <= dto.EndTime)
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.UserId), (x, os) => x.AcceptorId == dto.UserId)
|
|
|
+ .Select((x, os) => new OrderDto() { Id = x.Id.SelectAll(), SendBackOpinion = os.Content, SendBackAuditTime = os.AuditTime })
|
|
|
.MergeTable()
|
|
|
- .OrderByIF(dto is { SortField: "startTime", SortRule: 0 }, x => x.StartTime, OrderByType.Asc)
|
|
|
- .OrderByIF(dto is { SortField: "startTime", SortRule: 1 }, x => x.StartTime, OrderByType.Desc)
|
|
|
- .OrderByIF(dto is { SortField: "filedTime", SortRule: 0 }, x => x.FiledTime, OrderByType.Asc)
|
|
|
- .OrderByIF(dto is { SortField: "filedTime", SortRule: 1 }, x => x.FiledTime, OrderByType.Desc)
|
|
|
- .OrderByIF(dto is { SortField: "sendBackAuditTime", SortRule: 0 }, x => x.SendBackAuditTime, OrderByType.Asc)
|
|
|
- .OrderByIF(dto is { SortField: "sendBackAuditTime", SortRule: 1 }, x => x.SendBackAuditTime, OrderByType.Desc);
|
|
|
- return query;
|
|
|
- }
|
|
|
- else if (dto.StatisticsType == "centreFileNum")
|
|
|
- {
|
|
|
- var query = _orderRepository.Queryable().Where(x => x.CreationTime >= dto.StartTime && x.CreationTime <= dto.EndTime && x.FileUserRole == EFileUserType.Seat )
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.UserId), x => x.AcceptorId == dto.UserId)
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.No), x => x.No.Contains(dto.No!))
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.Title), x => x.Title.Contains(dto.Title!))
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.AcceptType), x => x.AcceptTypeCode == dto.AcceptType) //受理类型
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.Channel), x => x.SourceChannelCode == dto.Channel) //来源渠道
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.Hotspot),
|
|
|
- x => x.HotspotSpliceName != null && x.HotspotSpliceName.Contains(dto.Hotspot)) //热点分类
|
|
|
- .Where(x => x.Status >= EOrderStatus.Filed && x.FileOrgIsCenter == true).Select(x => new OrderDto() { Id = x.Id.SelectAll() })
|
|
|
- .OrderByIF(dto is { SortField: "startTime", SortRule: 0 }, x => x.StartTime, OrderByType.Asc)
|
|
|
- .OrderByIF(dto is { SortField: "startTime", SortRule: 1 }, x => x.StartTime, OrderByType.Desc)
|
|
|
- .OrderByIF(dto is { SortField: "filedTime", SortRule: 0 }, x => x.FiledTime, OrderByType.Asc)
|
|
|
- .OrderByIF(dto is { SortField: "filedTime", SortRule: 1 }, x => x.FiledTime, OrderByType.Desc)
|
|
|
- .OrderByIF(dto is { SortField: "sendBackAuditTime", SortRule: 0 }, x => x.SendBackAuditTime, OrderByType.Asc)
|
|
|
- .OrderByIF(dto is { SortField: "sendBackAuditTime", SortRule: 1 }, x => x.SendBackAuditTime, OrderByType.Desc);
|
|
|
- return query;
|
|
|
- }
|
|
|
- else if (dto.StatisticsType == "centreFileBackNum")
|
|
|
- {
|
|
|
- var query = _orderRepository.Queryable().Where(x => x.CreationTime >= dto.StartTime && x.CreationTime <= dto.EndTime )
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.UserId), x => x.AcceptorId == dto.UserId)
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.No), x => x.No.Contains(dto.No!))
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.Title), x => x.Title.Contains(dto.Title!))
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.AcceptType), x => x.AcceptTypeCode == dto.AcceptType) //受理类型
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.Channel), x => x.SourceChannelCode == dto.Channel) //来源渠道
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.Hotspot),
|
|
|
- x => x.HotspotSpliceName != null && x.HotspotSpliceName.Contains(dto.Hotspot)) //热点分类
|
|
|
- .Where(x => SqlFunc.Subqueryable<OrderSpecial>().Where(os => os.OrderId == x.Id && os.SpecialType == ESpecialType.SendBack && os.NextStepCode == "start").Any())
|
|
|
- .Select(x => new OrderDto() { Id = x.Id.SelectAll() })
|
|
|
- .OrderByIF(dto is { SortField: "startTime", SortRule: 0 }, x => x.StartTime, OrderByType.Asc)
|
|
|
- .OrderByIF(dto is { SortField: "startTime", SortRule: 1 }, x => x.StartTime, OrderByType.Desc)
|
|
|
- .OrderByIF(dto is { SortField: "filedTime", SortRule: 0 }, x => x.FiledTime, OrderByType.Asc)
|
|
|
- .OrderByIF(dto is { SortField: "filedTime", SortRule: 1 }, x => x.FiledTime, OrderByType.Desc)
|
|
|
- .OrderByIF(dto is { SortField: "sendBackAuditTime", SortRule: 0 }, x => x.SendBackAuditTime, OrderByType.Asc)
|
|
|
- .OrderByIF(dto is { SortField: "sendBackAuditTime", SortRule: 1 }, x => x.SendBackAuditTime, OrderByType.Desc);
|
|
|
- return query;
|
|
|
- }
|
|
|
- else if (dto.StatisticsType == "centreFileBackNumber")
|
|
|
- {
|
|
|
- var query = _orderRepository.Queryable().LeftJoin<OrderSpecial>((x, os) => x.Id == os.OrderId && os.SpecialType == ESpecialType.SendBack && os.NextStepCode == "start")
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.No), (x, os) => x.No.Contains(dto.No!))
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.Title), (x, os) => x.Title.Contains(dto.Title!))
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.AcceptType), (x, os) => x.AcceptTypeCode == dto.AcceptType) //受理类型
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.Channel), (x, os) => x.SourceChannelCode == dto.Channel) //来源渠道
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.Hotspot),
|
|
|
- (x, os) => x.HotspotSpliceName != null && x.HotspotSpliceName.Contains(dto.Hotspot)) //热点分类
|
|
|
- .Where((x, os) => x.CreationTime >= dto.StartTime && x.CreationTime <= dto.EndTime)
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.UserId), (x, os) => x.AcceptorId == dto.UserId)
|
|
|
- .Select((x, os) => new OrderDto() { Id = x.Id.SelectAll() , SendBackOpinion = os.Reason , SendBackAuditTime = os.CreationTime })
|
|
|
+ .OrderByIF(dto is { SortField: "startTime", SortRule: 0 }, x => x.StartTime, OrderByType.Asc)
|
|
|
+ .OrderByIF(dto is { SortField: "startTime", SortRule: 1 }, x => x.StartTime, OrderByType.Desc)
|
|
|
+ .OrderByIF(dto is { SortField: "filedTime", SortRule: 0 }, x => x.FiledTime, OrderByType.Asc)
|
|
|
+ .OrderByIF(dto is { SortField: "filedTime", SortRule: 1 }, x => x.FiledTime, OrderByType.Desc)
|
|
|
+ .OrderByIF(dto is { SortField: "sendBackAuditTime", SortRule: 0 }, x => x.SendBackAuditTime, OrderByType.Asc)
|
|
|
+ .OrderByIF(dto is { SortField: "sendBackAuditTime", SortRule: 1 }, x => x.SendBackAuditTime, OrderByType.Desc);
|
|
|
+ return query;
|
|
|
+ }
|
|
|
+ else if (dto.StatisticsType == "centreFileNum")
|
|
|
+ {
|
|
|
+ var query = _orderRepository.Queryable().Where(x => x.CreationTime >= dto.StartTime && x.CreationTime <= dto.EndTime && x.FileUserRole == EFileUserType.Seat)
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.UserId), x => x.AcceptorId == dto.UserId)
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.No), x => x.No.Contains(dto.No!))
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.Title), x => x.Title.Contains(dto.Title!))
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.AcceptType), x => x.AcceptTypeCode == dto.AcceptType) //受理类型
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.Channel), x => x.SourceChannelCode == dto.Channel) //来源渠道
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.Hotspot),
|
|
|
+ x => x.HotspotSpliceName != null && x.HotspotSpliceName.Contains(dto.Hotspot)) //热点分类
|
|
|
+ .Where(x => x.Status >= EOrderStatus.Filed && x.FileOrgIsCenter == true).Select(x => new OrderDto() { Id = x.Id.SelectAll() })
|
|
|
+ .OrderByIF(dto is { SortField: "startTime", SortRule: 0 }, x => x.StartTime, OrderByType.Asc)
|
|
|
+ .OrderByIF(dto is { SortField: "startTime", SortRule: 1 }, x => x.StartTime, OrderByType.Desc)
|
|
|
+ .OrderByIF(dto is { SortField: "filedTime", SortRule: 0 }, x => x.FiledTime, OrderByType.Asc)
|
|
|
+ .OrderByIF(dto is { SortField: "filedTime", SortRule: 1 }, x => x.FiledTime, OrderByType.Desc)
|
|
|
+ .OrderByIF(dto is { SortField: "sendBackAuditTime", SortRule: 0 }, x => x.SendBackAuditTime, OrderByType.Asc)
|
|
|
+ .OrderByIF(dto is { SortField: "sendBackAuditTime", SortRule: 1 }, x => x.SendBackAuditTime, OrderByType.Desc);
|
|
|
+ return query;
|
|
|
+ }
|
|
|
+ else if (dto.StatisticsType == "centreFileBackNum")
|
|
|
+ {
|
|
|
+ var query = _orderRepository.Queryable().Where(x => x.CreationTime >= dto.StartTime && x.CreationTime <= dto.EndTime)
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.UserId), x => x.AcceptorId == dto.UserId)
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.No), x => x.No.Contains(dto.No!))
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.Title), x => x.Title.Contains(dto.Title!))
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.AcceptType), x => x.AcceptTypeCode == dto.AcceptType) //受理类型
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.Channel), x => x.SourceChannelCode == dto.Channel) //来源渠道
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.Hotspot),
|
|
|
+ x => x.HotspotSpliceName != null && x.HotspotSpliceName.Contains(dto.Hotspot)) //热点分类
|
|
|
+ .Where(x => SqlFunc.Subqueryable<OrderSpecial>().Where(os => os.OrderId == x.Id && os.SpecialType == ESpecialType.SendBack && os.NextStepCode == "start").Any())
|
|
|
+ .Select(x => new OrderDto() { Id = x.Id.SelectAll() })
|
|
|
+ .OrderByIF(dto is { SortField: "startTime", SortRule: 0 }, x => x.StartTime, OrderByType.Asc)
|
|
|
+ .OrderByIF(dto is { SortField: "startTime", SortRule: 1 }, x => x.StartTime, OrderByType.Desc)
|
|
|
+ .OrderByIF(dto is { SortField: "filedTime", SortRule: 0 }, x => x.FiledTime, OrderByType.Asc)
|
|
|
+ .OrderByIF(dto is { SortField: "filedTime", SortRule: 1 }, x => x.FiledTime, OrderByType.Desc)
|
|
|
+ .OrderByIF(dto is { SortField: "sendBackAuditTime", SortRule: 0 }, x => x.SendBackAuditTime, OrderByType.Asc)
|
|
|
+ .OrderByIF(dto is { SortField: "sendBackAuditTime", SortRule: 1 }, x => x.SendBackAuditTime, OrderByType.Desc);
|
|
|
+ return query;
|
|
|
+ }
|
|
|
+ else if (dto.StatisticsType == "centreFileBackNumber")
|
|
|
+ {
|
|
|
+ var query = _orderRepository.Queryable().LeftJoin<OrderSpecial>((x, os) => x.Id == os.OrderId && os.SpecialType == ESpecialType.SendBack && os.NextStepCode == "start")
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.No), (x, os) => x.No.Contains(dto.No!))
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.Title), (x, os) => x.Title.Contains(dto.Title!))
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.AcceptType), (x, os) => x.AcceptTypeCode == dto.AcceptType) //受理类型
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.Channel), (x, os) => x.SourceChannelCode == dto.Channel) //来源渠道
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.Hotspot),
|
|
|
+ (x, os) => x.HotspotSpliceName != null && x.HotspotSpliceName.Contains(dto.Hotspot)) //热点分类
|
|
|
+ .Where((x, os) => x.CreationTime >= dto.StartTime && x.CreationTime <= dto.EndTime)
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.UserId), (x, os) => x.AcceptorId == dto.UserId)
|
|
|
+ .Select((x, os) => new OrderDto() { Id = x.Id.SelectAll(), SendBackOpinion = os.Reason, SendBackAuditTime = os.CreationTime })
|
|
|
.MergeTable()
|
|
|
.OrderByIF(dto is { SortField: "startTime", SortRule: 0 }, x => x.StartTime, OrderByType.Asc)
|
|
|
.OrderByIF(dto is { SortField: "startTime", SortRule: 1 }, x => x.StartTime, OrderByType.Desc)
|
|
@@ -6727,5 +6923,222 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
|
}
|
|
|
return null;
|
|
|
}
|
|
|
- #endregion
|
|
|
+
|
|
|
+
|
|
|
+ #region 自动延期
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 自动延期记录写入
|
|
|
+ /// </summary>
|
|
|
+ /// <returns></returns>
|
|
|
+ public async Task OrderDelayAutomatic()
|
|
|
+ {
|
|
|
+
|
|
|
+ var data = new List<OrderDelayAutomatic>();
|
|
|
+ var automatic = await _orderRepository.Queryable()
|
|
|
+ .Where(x => x.Status < EOrderStatus.Filed && x.ExpiredTime <= DateTime.Now.AddHours(1) && x.ExpiredTime >= DateTime.Now)
|
|
|
+ .Where(x => SqlFunc.Subqueryable<OrderDelay>().Where(od => od.OrderId == x.Id && od.DelayState == EDelayState.Examining).NotAny())
|
|
|
+ .Where(x => SqlFunc.Subqueryable<OrderDelayAutomatic>().Where(oda => oda.OrderId == x.Id && oda.Status == EOrderDelayAutomaticStatus.Pending && oda.Type == EOrderDelayAutomaticType.Automatic).NotAny())
|
|
|
+ .Select(x => new OrderDelayAutomatic
|
|
|
+ {
|
|
|
+ OrderId = x.Id,
|
|
|
+ WorkflowId = x.WorkflowId,
|
|
|
+ Title = x.Title,
|
|
|
+ No = x.No,
|
|
|
+ ExpiredTime = x.ExpiredTime,
|
|
|
+ CenterToOrgTime =x.CenterToOrgTime,
|
|
|
+ AcceptTypeCode =x.AcceptTypeCode,
|
|
|
+ Type = EOrderDelayAutomaticType.Automatic
|
|
|
+ })
|
|
|
+ .ToListAsync();
|
|
|
+ if (automatic.Any())
|
|
|
+ {
|
|
|
+ data.AddRange(automatic);
|
|
|
+ }
|
|
|
+ var automaticSMS = await _orderRepository.Queryable()
|
|
|
+ .Where(x => x.Status < EOrderStatus.Filed && x.ExpiredTime <= DateTime.Now.AddHours(2) && x.ExpiredTime >= DateTime.Now.AddHours(1) && x.ExpiredTime >= DateTime.Now)
|
|
|
+ .Where(x => SqlFunc.Subqueryable<OrderDelay>().Where(od => od.OrderId == x.Id && od.DelayState == EDelayState.Examining).NotAny())
|
|
|
+ .Where(x => SqlFunc.Subqueryable<OrderDelayAutomatic>().Where(oda => oda.OrderId == x.Id && oda.Status == EOrderDelayAutomaticStatus.Pending && oda.Type == EOrderDelayAutomaticType.Sms).NotAny())
|
|
|
+ .Select(x => new OrderDelayAutomatic
|
|
|
+ {
|
|
|
+ OrderId = x.Id,
|
|
|
+ WorkflowId = x.WorkflowId,
|
|
|
+ Title = x.Title,
|
|
|
+ No = x.No,
|
|
|
+ ExpiredTime = x.ExpiredTime,
|
|
|
+ CenterToOrgTime = x.CenterToOrgTime,
|
|
|
+ AcceptTypeCode = x.AcceptTypeCode,
|
|
|
+ Type = EOrderDelayAutomaticType.Sms
|
|
|
+ })
|
|
|
+ .ToListAsync();
|
|
|
+ if (automaticSMS.Any())
|
|
|
+ {
|
|
|
+ data.AddRange(automaticSMS);
|
|
|
+ }
|
|
|
+ if (data.Any())
|
|
|
+ {
|
|
|
+ await _orderDelayAutomaticRepository.AddRangeAsync(data);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 自动延期处理
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="type"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ public async Task OrderDelayAutomaticHandle(EOrderDelayAutomaticType type)
|
|
|
+ {
|
|
|
+ var copy = new List<OrderDelayAutomatic>();
|
|
|
+ var tasks = await _orderDelayAutomaticRepository.Queryable()
|
|
|
+ .Where(x => x.Status == EOrderDelayAutomaticStatus.Pending && x.Type == type)
|
|
|
+ .ToListAsync();
|
|
|
+ foreach (var task in tasks)
|
|
|
+ {
|
|
|
+ task.Status = EOrderDelayAutomaticStatus.BeingProcessed;
|
|
|
+ var row = await _orderDelayAutomaticRepository.Updateable(task).ExecuteCommandWithOptLockAsync();
|
|
|
+ if (row > 0)
|
|
|
+ {
|
|
|
+ copy.Add(task);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (type == EOrderDelayAutomaticType.Sms)
|
|
|
+ {
|
|
|
+ if (copy.Any())
|
|
|
+ {
|
|
|
+ foreach (var item in copy)
|
|
|
+ {
|
|
|
+ var workflow = await _workflowDomainService.GetWorkflowAsync(item.WorkflowId, withSteps: true);
|
|
|
+ var steps = workflow.Steps.Where(x => x.Status == EWorkflowStepStatus.WaitForAccept || x.Status == EWorkflowStepStatus.WaitForHandle).ToList();
|
|
|
+ if (steps.Any())
|
|
|
+ {
|
|
|
+ foreach (var step in steps)
|
|
|
+ {
|
|
|
+ var setting = step.HandlerOrgId == OrgSeedData.CenterId ? SettingConstants.AutomaticDelayCenterRoles : SettingConstants.AutomaticDelayDepartmentRoles;
|
|
|
+ var roleIds = _systemSettingCacheManager.GetSetting(setting)?.SettingValue;
|
|
|
+ if (step.HandlerOrgId == OrgSeedData.CenterId && string.IsNullOrEmpty(step.RoleId))
|
|
|
+ {
|
|
|
+ roleIds.Add(step.RoleId);
|
|
|
+ }
|
|
|
+ var userList = await _userRepository.Queryable().Where(x => x.OrgId == step.HandlerOrgId && x.Roles.Any(r => roleIds.Contains(r.Name))).ToListAsync();
|
|
|
+ foreach (var user in userList)
|
|
|
+ {
|
|
|
+ if (!string.IsNullOrEmpty(user.PhoneNo))
|
|
|
+ {
|
|
|
+ //发送短信
|
|
|
+ var messageDto = new Share.Dtos.Push.MessageDto
|
|
|
+ {
|
|
|
+ PushBusiness = EPushBusiness.AutomaticDelay,
|
|
|
+ ExternalId = item.Id,
|
|
|
+ OrderId = item.Id,
|
|
|
+ PushPlatform = EPushPlatform.Sms,
|
|
|
+ Remark = item.Title,
|
|
|
+ Name = user.Name,
|
|
|
+ TemplateCode = "1015",
|
|
|
+ Params = new List<string>() { item.No },
|
|
|
+ TelNumber = user.PhoneNo,
|
|
|
+ };
|
|
|
+ await _mediator.Publish(new PushMessageNotify(messageDto));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ await _orderDelayAutomaticRepository.Updateable().SetColumns(x=>x.Status == EOrderDelayAutomaticStatus.Processed).Where(x=>x.Id == item.Id).ExecuteCommandAsync();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (type == EOrderDelayAutomaticType.Automatic)
|
|
|
+ {
|
|
|
+ if (copy.Any())
|
|
|
+ {
|
|
|
+ foreach (var item in copy)
|
|
|
+ {
|
|
|
+ var delayAny = await _orderDelayRepository.Queryable().Where(x => x.OrderId == item.OrderId && x.DelayState == EDelayState.Examining).AnyAsync();
|
|
|
+ if (!delayAny)
|
|
|
+ {
|
|
|
+ var delays = await _orderDelayRepository.Queryable().Where(x => x.OrderId == item.OrderId && x.AutomaticDelayNum > 0).ToListAsync();
|
|
|
+ var delay = new OrderDelay();
|
|
|
+ if (delays.Any())
|
|
|
+ {
|
|
|
+ delay = delays.First();
|
|
|
+ var startTime = DateTime.Now;
|
|
|
+ if (item.CenterToOrgTime.HasValue)
|
|
|
+ {
|
|
|
+ startTime = item.CenterToOrgTime.Value;
|
|
|
+ }
|
|
|
+ var beforeDelay = DateTime.Now;
|
|
|
+ if (!_appOptions.Value.IsYiBin)
|
|
|
+ {
|
|
|
+ beforeDelay = item.ExpiredTime.Value;
|
|
|
+ }
|
|
|
+ delay.AfterDelay = (await _expireTime
|
|
|
+ .CalcEndTime(beforeDelay, startTime, delay.DelayUnit, delay.DelayNum, item.AcceptTypeCode))?.EndTime; //todo
|
|
|
+ await _orderDelayRepository.Updateable().SetColumns(x => new OrderDelay() { AutomaticDelayNum = x.AutomaticDelayNum + 1, ApplyDelayTime = DateTime.Now, AfterDelay = delay.AfterDelay })
|
|
|
+ .Where(x => x.Id == delay.Id).ExecuteCommandAsync();
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ delay.OrderId = item.OrderId;
|
|
|
+ delay.EmployeeId = "";
|
|
|
+ delay.EmployeeName = "系统自动延期";
|
|
|
+ delay.ApplyOrgName = OrgSeedData.CenterName;
|
|
|
+ delay.ApplyOrgCode = OrgSeedData.CenterId;
|
|
|
+ delay.DelayApplyType = EDelayApplyType.LocalApply;
|
|
|
+ delay.BeforeDelay = item.ExpiredTime;
|
|
|
+ delay.DelayState = EDelayState.Pass;
|
|
|
+ delay.DelayReason = "系统自动延期";
|
|
|
+ delay.ApplyDelayTime = DateTime.Now;
|
|
|
+ delay.No = item.No;
|
|
|
+ delay.AutomaticDelayNum = 1;
|
|
|
+ delay.DelayNum = 1;
|
|
|
+ delay.DelayUnit = Share.Enums.Settings.ETimeType.WorkDay;
|
|
|
+ delay.IsProDelay = false;
|
|
|
+ delay.CreatorOrgId = OrgSeedData.CenterId;
|
|
|
+ delay.CreatorOrgName = OrgSeedData.CenterName;
|
|
|
+ delay.CreatorName = "系统自动延期";
|
|
|
+ var startTime = DateTime.Now;
|
|
|
+ if (item.CenterToOrgTime.HasValue)
|
|
|
+ {
|
|
|
+ startTime = item.CenterToOrgTime.Value;
|
|
|
+ }
|
|
|
+ if (delay.BeforeDelay != null)
|
|
|
+ {
|
|
|
+ delay.AfterDelay = (await _expireTime
|
|
|
+ .CalcEndTime(delay.BeforeDelay.Value, startTime, delay.DelayUnit, delay.DelayNum, item.AcceptTypeCode))?.EndTime; //todo
|
|
|
+ }
|
|
|
+ await _orderDelayRepository.AddAsync(delay, false);
|
|
|
+ }
|
|
|
+ //处理工单延期
|
|
|
+ await DelayOrderExpiredTimeAsync(item.OrderId, delay.DelayNum, delay.DelayUnit, delay.IsProDelay, default);
|
|
|
+ }
|
|
|
+ await _orderDelayAutomaticRepository.Updateable().SetColumns(x => x.Status == EOrderDelayAutomaticStatus.Processed).Where(x => x.Id == item.Id).ExecuteCommandAsync();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 批量发送短信
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <param name="cancellationToken"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ public async Task SendLeaderSMS(PublishLeaderSMSDto dto, CancellationToken cancellationToken)
|
|
|
+ {
|
|
|
+ //发送短信
|
|
|
+ var messageDto = new Share.Dtos.Push.MessageDto
|
|
|
+ {
|
|
|
+ PushBusiness = EPushBusiness.OrderSend,
|
|
|
+ ExternalId = dto.OrderId,
|
|
|
+ OrderId = dto.OrderId,
|
|
|
+ PushPlatform = EPushPlatform.Sms,
|
|
|
+ Remark = string.Empty,
|
|
|
+ Name = dto.Name,
|
|
|
+ TemplateCode = "1014",
|
|
|
+ Params = new(),
|
|
|
+ TelNumber = dto.TelNumber,
|
|
|
+ };
|
|
|
+ await _mediator.Publish(new PushMessageNotify(messageDto), cancellationToken);
|
|
|
+ }
|
|
|
+ #endregion
|
|
|
+ #endregion
|
|
|
}
|