|
@@ -121,9 +121,9 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
private readonly ISessionContextManager _sessionContextManager;
|
|
private readonly ISessionContextManager _sessionContextManager;
|
|
private readonly IOrderVisitApplication _orderVisitApplication;
|
|
private readonly IOrderVisitApplication _orderVisitApplication;
|
|
private readonly IRepository<OrderVisitDetailCopy> _orderVisitDetailCopyRepository;
|
|
private readonly IRepository<OrderVisitDetailCopy> _orderVisitDetailCopyRepository;
|
|
- private readonly IRepository<OrderDelayAutomatic> _orderDelayAutomaticRepository;
|
|
|
|
|
|
+ private readonly IRepository<OrderDelayAutomatic> _orderDelayAutomaticRepository;
|
|
|
|
|
|
- public OrderApplication(
|
|
|
|
|
|
+ public OrderApplication(
|
|
IOrderDomainService orderDomainService,
|
|
IOrderDomainService orderDomainService,
|
|
IOrderRepository orderRepository,
|
|
IOrderRepository orderRepository,
|
|
IWorkflowDomainService workflowDomainService,
|
|
IWorkflowDomainService workflowDomainService,
|
|
@@ -175,8 +175,8 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
IOrderVisitApplication orderVisitApplication,
|
|
IOrderVisitApplication orderVisitApplication,
|
|
IRepository<Role> roleRepository,
|
|
IRepository<Role> roleRepository,
|
|
IRepository<OrderVisitDetailCopy> orderVisitDetailCopyRepository,
|
|
IRepository<OrderVisitDetailCopy> orderVisitDetailCopyRepository,
|
|
- IRepository<OrderDelayAutomatic> orderDelayAutomaticRepository
|
|
|
|
- )
|
|
|
|
|
|
+ IRepository<OrderDelayAutomatic> orderDelayAutomaticRepository
|
|
|
|
+ )
|
|
{
|
|
{
|
|
_orderDomainService = orderDomainService;
|
|
_orderDomainService = orderDomainService;
|
|
_workflowDomainService = workflowDomainService;
|
|
_workflowDomainService = workflowDomainService;
|
|
@@ -228,8 +228,8 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
_orderVisitApplication = orderVisitApplication;
|
|
_orderVisitApplication = orderVisitApplication;
|
|
_roleRepository = roleRepository;
|
|
_roleRepository = roleRepository;
|
|
_orderVisitDetailCopyRepository = orderVisitDetailCopyRepository;
|
|
_orderVisitDetailCopyRepository = orderVisitDetailCopyRepository;
|
|
- _orderDelayAutomaticRepository = orderDelayAutomaticRepository;
|
|
|
|
- }
|
|
|
|
|
|
+ _orderDelayAutomaticRepository = orderDelayAutomaticRepository;
|
|
|
|
+ }
|
|
|
|
|
|
/// <summary>
|
|
/// <summary>
|
|
/// 更新工单办理期满时间(延期调用,其他不调用)
|
|
/// 更新工单办理期满时间(延期调用,其他不调用)
|
|
@@ -1871,7 +1871,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
.WhereIF(!string.IsNullOrEmpty(dto.ActualHandlerName), d => d.ActualHandlerName == dto.ActualHandlerName) //接办人
|
|
.WhereIF(!string.IsNullOrEmpty(dto.ActualHandlerName), d => d.ActualHandlerName == dto.ActualHandlerName) //接办人
|
|
.WhereIF(dto.IsScreen == true, d => d.OrderScreens.Any(x => x.Status != EScreenStatus.Refuse)) //有甄别
|
|
.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(dto.IsScreen == false, d => !d.OrderScreens.Any(x => x.Status != EScreenStatus.Refuse)) //无甄别
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.CurrentStepCode), d => d.CurrentStepCode == dto.CurrentStepCode) //当前办理节点
|
|
|
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.CurrentStepName), d => d.CurrentStepName == dto.CurrentStepName) //当前办理节点
|
|
.WhereIF(dto.ActualHandleTimeStart.HasValue, d => d.FiledTime >= dto.ActualHandleTimeStart) //办结时间开始
|
|
.WhereIF(dto.ActualHandleTimeStart.HasValue, d => d.FiledTime >= dto.ActualHandleTimeStart) //办结时间开始
|
|
.WhereIF(dto.ActualHandleTimeEnd.HasValue, d => d.FiledTime <= dto.ActualHandleTimeEnd) //办结时间结束
|
|
.WhereIF(dto.ActualHandleTimeEnd.HasValue, d => d.FiledTime <= dto.ActualHandleTimeEnd) //办结时间结束
|
|
.WhereIF(dto.IsOverTime == true,
|
|
.WhereIF(dto.IsOverTime == true,
|
|
@@ -2445,12 +2445,12 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
quer = _orderRepository.UnionAll(quer, queryCountersignOrder).MergeTable()
|
|
quer = _orderRepository.UnionAll(quer, queryCountersignOrder).MergeTable()
|
|
.InnerJoin<SystemOrganize>((x, so) => x.ActualHandleOrgCode == so.Id)
|
|
.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.ExpiredTime, OrderByType.Asc)
|
|
|
|
- .OrderByIF(dto is { SortField: "expiredTime", SortRule: 1 }, x => x.ExpiredTime, OrderByType.Desc);
|
|
|
|
|
|
+ .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.ExpiredTime, OrderByType.Asc)
|
|
|
|
+ .OrderByIF(dto is { SortField: "expiredTime", SortRule: 1 }, x => x.ExpiredTime, OrderByType.Desc);
|
|
return quer;
|
|
return quer;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -4479,7 +4479,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
query = query.WhereIF(dto.VisitStateQuery == EVisitStateQuery.Visited, d => d.VisitState == EVisitState.Visited)
|
|
query = query.WhereIF(dto.VisitStateQuery == EVisitStateQuery.Visited, d => d.VisitState == EVisitState.Visited)
|
|
.WhereIF(dto.VisitStateQuery == EVisitStateQuery.SMSUnsatisfied, d => d.VisitState == EVisitState.SMSUnsatisfied)
|
|
.WhereIF(dto.VisitStateQuery == EVisitStateQuery.SMSUnsatisfied, d => d.VisitState == EVisitState.SMSUnsatisfied)
|
|
.WhereIF(dto.VisitStateQuery == EVisitStateQuery.SMSVisiting, d => d.VisitState == EVisitState.SMSVisiting)
|
|
.WhereIF(dto.VisitStateQuery == EVisitStateQuery.SMSVisiting, d => d.VisitState == EVisitState.SMSVisiting)
|
|
- .WhereIF(dto.VisitStateQuery == EVisitStateQuery.AiVisitWaitForVisit,d=>d.VisitState == EVisitState.AiVisitWaitForVisit)
|
|
|
|
|
|
+ .WhereIF(dto.VisitStateQuery == EVisitStateQuery.AiVisitWaitForVisit, d => d.VisitState == EVisitState.AiVisitWaitForVisit)
|
|
.WhereIF(dto.VisitStateQuery == EVisitStateQuery.NoPutThrough,
|
|
.WhereIF(dto.VisitStateQuery == EVisitStateQuery.NoPutThrough,
|
|
d => d.IsPutThrough == false && d.VisitState != EVisitState.Visited && d.VisitState != EVisitState.None)
|
|
d => d.IsPutThrough == false && d.VisitState != EVisitState.Visited && d.VisitState != EVisitState.None)
|
|
.WhereIF(_appOptions.Value.IsZiGong && dto.VisitStateQuery == EVisitStateQuery.NoPutThrough,
|
|
.WhereIF(_appOptions.Value.IsZiGong && dto.VisitStateQuery == EVisitStateQuery.NoPutThrough,
|
|
@@ -5511,7 +5511,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
{
|
|
{
|
|
if (_appOptions.Value.IsLuZhou)
|
|
if (_appOptions.Value.IsLuZhou)
|
|
{
|
|
{
|
|
- return await SendOrderReportAsync_LZ(dto);
|
|
|
|
|
|
+ return await SendOrderReportAsync_LZ(dto);
|
|
}
|
|
}
|
|
var itemsHandled = _workflowTraceRepository.Queryable()
|
|
var itemsHandled = _workflowTraceRepository.Queryable()
|
|
.LeftJoin<Workflow>((x, w) => x.WorkflowId == w.Id)
|
|
.LeftJoin<Workflow>((x, w) => x.WorkflowId == w.Id)
|
|
@@ -5601,69 +5601,69 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
return res;
|
|
return res;
|
|
}
|
|
}
|
|
|
|
|
|
- /// <summary>
|
|
|
|
- /// 泸州派单量统计
|
|
|
|
- /// </summary>
|
|
|
|
- /// <param name="dto"></param>
|
|
|
|
- /// <returns></returns>
|
|
|
|
- public async Task<List<SendOrderReportOutDto>> SendOrderReportAsync_LZ(QuerySendOrderRequest dto)
|
|
|
|
|
|
+ /// <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 == WorkflowModuleConsts.OrderHandle && 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,
|
|
|
|
|
|
+ var itemsHandled = _workflowTraceRepository.Queryable()
|
|
|
|
+ .LeftJoin<Workflow>((x, w) => x.WorkflowId == w.Id)
|
|
|
|
+ .Where((x, w) => w.ModuleCode == WorkflowModuleConsts.OrderHandle && 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,
|
|
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 == WorkflowModuleConsts.OrderHandle && 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,
|
|
|
|
- NoSendOrderNum = SqlFunc.AggregateDistinctCount(w.ExternalId),
|
|
|
|
- ReSendOrderNum =0,
|
|
|
|
- });
|
|
|
|
-
|
|
|
|
- var items2 = _workflowTraceRepository.Queryable()
|
|
|
|
- .LeftJoin<Workflow>((x, w) => x.WorkflowId == w.Id)
|
|
|
|
- .Where((x, w) => w.ModuleCode == WorkflowModuleConsts.OrderHandle &&
|
|
|
|
- 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),
|
|
|
|
- });
|
|
|
|
|
|
+ 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 == WorkflowModuleConsts.OrderHandle && 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,
|
|
|
|
+ NoSendOrderNum = SqlFunc.AggregateDistinctCount(w.ExternalId),
|
|
|
|
+ ReSendOrderNum = 0,
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ var items2 = _workflowTraceRepository.Queryable()
|
|
|
|
+ .LeftJoin<Workflow>((x, w) => x.WorkflowId == w.Id)
|
|
|
|
+ .Where((x, w) => w.ModuleCode == WorkflowModuleConsts.OrderHandle &&
|
|
|
|
+ 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, items2)
|
|
var items = await _orderRepository.UnionAll(itemsHandled, itemsNo, items2)
|
|
.GroupBy(x => new { x.UserId, x.UserName, x.StepName })
|
|
.GroupBy(x => new { x.UserId, x.UserName, x.StepName })
|
|
@@ -5676,51 +5676,52 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
NoSendOrderNum = SqlFunc.AggregateSum(x.NoSendOrderNum),
|
|
NoSendOrderNum = SqlFunc.AggregateSum(x.NoSendOrderNum),
|
|
ReSendOrderNum = SqlFunc.AggregateSum(x.ReSendOrderNum)
|
|
ReSendOrderNum = SqlFunc.AggregateSum(x.ReSendOrderNum)
|
|
}).ToListAsync();
|
|
}).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)
|
|
|
|
|
|
+ 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)
|
|
if (_appOptions.Value.IsLuZhou)
|
|
{
|
|
{
|
|
return QuerySendOrderDetail_LZ(dto);
|
|
return QuerySendOrderDetail_LZ(dto);
|
|
|
|
|
|
- }
|
|
|
|
- if (dto.TitleCode.ToUpper() == "RESENDORDERNUM")
|
|
|
|
|
|
+ }
|
|
|
|
+ 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 == WorkflowModuleConsts.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);
|
|
|
|
|
|
+ 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 == WorkflowModuleConsts.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;
|
|
return query;
|
|
}
|
|
}
|
|
- var query2 = _workflowTraceRepository.Queryable()
|
|
|
|
|
|
+ var query2 = _workflowTraceRepository.Queryable()
|
|
.InnerJoin<SchedulingUser>((x, su) => x.HandlerId == su.UserId)
|
|
.InnerJoin<SchedulingUser>((x, su) => x.HandlerId == su.UserId)
|
|
.Where((x, su) => x.ModuleCode == WorkflowModuleConsts.OrderHandle && x.BusinessType == EBusinessType.Send)
|
|
.Where((x, su) => x.ModuleCode == WorkflowModuleConsts.OrderHandle && x.BusinessType == EBusinessType.Send)
|
|
.Where((x, su) => x.CreationTime >= dto.StartTime.Value && x.CreationTime <= dto.EndTime.Value && su.UserId == dto.UserId)
|
|
.Where((x, su) => x.CreationTime >= dto.StartTime.Value && x.CreationTime <= dto.EndTime.Value && su.UserId == dto.UserId)
|
|
@@ -5732,34 +5733,34 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
.LeftJoin<Order>((a, b) => a.Id == b.Id)
|
|
.LeftJoin<Order>((a, b) => a.Id == b.Id)
|
|
.Select((a, b) => b);
|
|
.Select((a, b) => b);
|
|
return query2;
|
|
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 == WorkflowModuleConsts.OrderHandle && 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)
|
|
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ 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 == WorkflowModuleConsts.OrderHandle && 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 == "派单组")
|
|
- .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;
|
|
|
|
- }
|
|
|
|
|
|
+ .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()
|
|
var query2 = _workflowTraceRepository.Queryable()
|
|
.Where(x => x.ModuleCode == WorkflowModuleConsts.OrderHandle && (x.Name == "派单组" || x.Name == "班长审批"))
|
|
.Where(x => x.ModuleCode == WorkflowModuleConsts.OrderHandle && (x.Name == "派单组" || x.Name == "班长审批"))
|
|
.Where(x => x.CreationTime >= dto.StartTime.Value && x.CreationTime <= dto.EndTime.Value && x.HandlerId == dto.UserId)
|
|
.Where(x => x.CreationTime >= dto.StartTime.Value && x.CreationTime <= dto.EndTime.Value && x.HandlerId == dto.UserId)
|
|
@@ -5772,15 +5773,15 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
.MergeTable()
|
|
.MergeTable()
|
|
.LeftJoin<Order>((a, b) => a.Id == b.Id)
|
|
.LeftJoin<Order>((a, b) => a.Id == b.Id)
|
|
.Select((a, b) => b);
|
|
.Select((a, b) => b);
|
|
- return query2;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- /// <summary>
|
|
|
|
- /// 扭转信件统计
|
|
|
|
- /// </summary>
|
|
|
|
- /// <param name="dto"></param>
|
|
|
|
- /// <returns></returns>
|
|
|
|
- public ISugarQueryable<OrderVisitJudeStatisticsRep> OrderVisitJudeStatistics(OrderVisitJudeStatisticsReq dto)
|
|
|
|
|
|
+ return query2;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /// <summary>
|
|
|
|
+ /// 扭转信件统计
|
|
|
|
+ /// </summary>
|
|
|
|
+ /// <param name="dto"></param>
|
|
|
|
+ /// <returns></returns>
|
|
|
|
+ public ISugarQueryable<OrderVisitJudeStatisticsRep> OrderVisitJudeStatistics(OrderVisitJudeStatisticsReq dto)
|
|
{
|
|
{
|
|
if (!dto.EndTime.HasValue)
|
|
if (!dto.EndTime.HasValue)
|
|
{
|
|
{
|
|
@@ -6926,220 +6927,220 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
- #region 自动延期
|
|
|
|
|
|
+ #region 自动延期
|
|
|
|
|
|
/// <summary>
|
|
/// <summary>
|
|
/// 自动延期记录写入
|
|
/// 自动延期记录写入
|
|
/// </summary>
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
/// <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)
|
|
|
|
- {
|
|
|
|
|
|
+ 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 copy = new List<OrderDelayAutomatic>();
|
|
- var tasks = await _orderDelayAutomaticRepository.Queryable()
|
|
|
|
- .Where(x => x.Status == EOrderDelayAutomaticStatus.Pending && x.Type == type)
|
|
|
|
- .ToListAsync();
|
|
|
|
- foreach (var task in tasks)
|
|
|
|
|
|
+ var tasks = await _orderDelayAutomaticRepository.Queryable()
|
|
|
|
+ .Where(x => x.Status == EOrderDelayAutomaticStatus.Pending && x.Type == type)
|
|
|
|
+ .ToListAsync();
|
|
|
|
+ foreach (var task in tasks)
|
|
{
|
|
{
|
|
task.Status = EOrderDelayAutomaticStatus.BeingProcessed;
|
|
task.Status = EOrderDelayAutomaticStatus.BeingProcessed;
|
|
- var row = await _orderDelayAutomaticRepository.Updateable(task).ExecuteCommandWithOptLockAsync();
|
|
|
|
|
|
+ var row = await _orderDelayAutomaticRepository.Updateable(task).ExecuteCommandWithOptLockAsync();
|
|
if (row > 0)
|
|
if (row > 0)
|
|
{
|
|
{
|
|
copy.Add(task);
|
|
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
|
|
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ 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
|
|
}
|
|
}
|