|
@@ -6,12 +6,9 @@ using Hotline.FlowEngine.Workflows;
|
|
|
using Hotline.Orders;
|
|
|
using Hotline.Repository.SqlSugar.Extensions;
|
|
|
using Hotline.Repository.SqlSugar.Ts;
|
|
|
-using Hotline.Settings.TimeLimits;
|
|
|
-using Hotline.Share.Dtos;
|
|
|
using Hotline.Share.Dtos.DataSharing.PusherHotlineDto;
|
|
|
using Hotline.Share.Dtos.File;
|
|
|
using Hotline.Share.Dtos.FlowEngine;
|
|
|
-using Hotline.Share.Dtos.FlowEngine.Workflow;
|
|
|
using Hotline.Share.Dtos.Order;
|
|
|
using Hotline.Share.Dtos.Settings;
|
|
|
using Hotline.Share.Enums.Order;
|
|
@@ -20,36 +17,23 @@ using Hotline.Share.Enums.Settings;
|
|
|
using Hotline.Share.Requests;
|
|
|
using Hotline.Tools;
|
|
|
using MapsterMapper;
|
|
|
-using Microsoft.AspNetCore.Mvc.Formatters;
|
|
|
-using Microsoft.EntityFrameworkCore.Metadata.Internal;
|
|
|
-using Novacode;
|
|
|
using SqlSugar;
|
|
|
using System.Data;
|
|
|
using System.Dynamic;
|
|
|
using Hotline.Settings;
|
|
|
using XF.Domain.Authentications;
|
|
|
-using XF.Domain.Constants;
|
|
|
using XF.Domain.Dependency;
|
|
|
using XF.Domain.Exceptions;
|
|
|
using XF.Domain.Repository;
|
|
|
-using Hotline.Repository.SqlSugar.System;
|
|
|
-using Microsoft.AspNetCore.Mvc;
|
|
|
-using Hotline.Share.Dtos.Bi;
|
|
|
-using System.Net;
|
|
|
using PanGu;
|
|
|
using Hotline.Users;
|
|
|
-using PanGu.Match;
|
|
|
using Hotline.Settings.Hotspots;
|
|
|
using Hotline.Share.Enums.FlowEngine;
|
|
|
using Hotline.Authentications;
|
|
|
-using Hotline.Repository.SqlSugar;
|
|
|
using MediatR;
|
|
|
using Hotline.Share.Mq;
|
|
|
-using JiebaNet.Segmenter;
|
|
|
-using Microsoft.AspNetCore.Http;
|
|
|
using WordInfo = PanGu.WordInfo;
|
|
|
using Hotline.Schedulings;
|
|
|
-using NPOI.SS.Formula.Functions;
|
|
|
using XF.Domain.Entities;
|
|
|
using Hotline.Settings.TimeLimitDomain;
|
|
|
using Hotline.FlowEngine.WorkflowModules;
|
|
@@ -60,19 +44,10 @@ using Hotline.Configurations;
|
|
|
using Microsoft.Extensions.Options;
|
|
|
using Mapster;
|
|
|
using Hotline.Share.Dtos.Push;
|
|
|
-using Mapster;
|
|
|
-using Hotline.Share.Tools;
|
|
|
using Hotline.EventBus;
|
|
|
using Hotline.Orders.Notifications;
|
|
|
using Hotline.OrderTranspond;
|
|
|
using XF.Utility.EnumExtensions;
|
|
|
-using Newtonsoft.Json;
|
|
|
-using static NPOI.SS.Format.CellNumberFormatter;
|
|
|
-using System.Linq;
|
|
|
-using System.Linq.Dynamic.Core;
|
|
|
-using System.Threading;
|
|
|
-using Hotline.Application.CallCenter;
|
|
|
-using Hotline.Repository.SqlSugar.Orders;
|
|
|
using Hotline.Share.Dtos.Order.Publish;
|
|
|
|
|
|
namespace Hotline.Application.Orders;
|
|
@@ -119,7 +94,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
|
private readonly IOrderDelayRepository _orderDelayRepository;
|
|
|
private readonly IRepository<OrderSecondaryHandling> _orderSecondaryHandlingRepository;
|
|
|
|
|
|
- public OrderApplication(
|
|
|
+ public OrderApplication(
|
|
|
IOrderDomainService orderDomainService,
|
|
|
IOrderRepository orderRepository,
|
|
|
IWorkflowDomainService workflowDomainService,
|
|
@@ -157,7 +132,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
|
IOrderTerminateRepository orderTerminateRepository,
|
|
|
IRepository<OrderPublishHistory> orderPublishHistoryRepository,
|
|
|
IRepository<OrderSecondaryHandling> orderSecondaryHandlingRepository,
|
|
|
- IOrderDelayRepository orderDelayRepository)
|
|
|
+ IOrderDelayRepository orderDelayRepository)
|
|
|
{
|
|
|
_orderDomainService = orderDomainService;
|
|
|
_workflowDomainService = workflowDomainService;
|
|
@@ -197,7 +172,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
|
_sessionContext = sessionContext;
|
|
|
_orderDelayRepository = orderDelayRepository;
|
|
|
_orderSecondaryHandlingRepository = orderSecondaryHandlingRepository;
|
|
|
- }
|
|
|
+ }
|
|
|
|
|
|
/// <summary>
|
|
|
/// 更新工单办理期满时间(延期调用,其他不调用)
|
|
@@ -243,8 +218,8 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
|
|
|
|
var orderDto = _mapper.Map<OrderDto>(order);
|
|
|
await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderExpiredTimeUpdate, orderDto,
|
|
|
- cancellationToken: cancellationToken);
|
|
|
- }
|
|
|
+ cancellationToken: cancellationToken);
|
|
|
+ }
|
|
|
|
|
|
// /// <summary>
|
|
|
// /// 新增工单办理流程记录
|
|
@@ -695,7 +670,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.ActualHandleOrgName), d => d.ActualHandleOrgName.Contains(dto.ActualHandleOrgName)) //接办部门(综合查询模糊)
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.AcceptType), d => d.AcceptTypeCode == dto.AcceptType) //受理类型
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.Hotspot), d => d.HotspotSpliceName != null && d.HotspotSpliceName.Contains(dto.Hotspot))
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.OrgLevelOneName),d=>d.OrgLevelOneName.Contains(dto.OrgLevelOneName)) //一级部门
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.OrgLevelOneName), d => d.OrgLevelOneName.Contains(dto.OrgLevelOneName)) //一级部门
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.FromPhone), d => d.FromPhone == dto.FromPhone) //来电号码
|
|
|
//.WhereIF(!string.IsNullOrEmpty(dto.PubMan),
|
|
|
// d => d.AcceptorName.Contains(dto.PubMan!) || d.AcceptorStaffNo.Contains(dto.PubMan!))
|
|
@@ -1001,7 +976,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
|
await _orderRepository.UpdateAsync(order, cancellationToken);
|
|
|
}
|
|
|
|
|
|
-
|
|
|
+
|
|
|
|
|
|
if (dto.Data.LeaderSMSKey != null)
|
|
|
{
|
|
@@ -1254,7 +1229,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.OrgLevelOneName), d => d.OrgLevelOneName.Contains(dto.OrgLevelOneName)) //一级部门
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.ActualHandleOrgName), d => d.ActualHandleOrgName.Contains(dto.ActualHandleOrgName)) //接办部门(综合查询模糊)
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.NameOrNo), d => d.AcceptorName == dto.NameOrNo! || d.AcceptorStaffNo == dto.NameOrNo!) //受理人/坐席
|
|
|
- .WhereIF(dto.CreationTimeStart.HasValue, d => d.CreationTime >= dto.CreationTimeStart) //受理时间开始
|
|
|
+ .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)) //来电号码
|
|
@@ -2632,54 +2607,54 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
|
|
|
|
public ISugarQueryable<OrderVisitDetail> MayScreenList(MayScreenListDto dto)
|
|
|
{
|
|
|
- dto.ScreenType = dto.ScreenType is null ? 0 : dto.ScreenType;
|
|
|
- var query = _orderVisitedDetailRepository.Queryable(false, true)
|
|
|
- .Includes(x => x.OrderVisit)
|
|
|
- .Includes(x => x.OrderVisit, y => y.Order)
|
|
|
- .Includes(x => x.OrderVisit, y => y.Employee)
|
|
|
- //.LeftJoin<OrderScreen>((x, s) => x.Id == s.VisitDetailId && s.IsDeleted == false)
|
|
|
- .Includes(x => x.OrderScreens)
|
|
|
- .Where(x => x.OrderScreens.Any(s => s.Status == EScreenStatus.SendBack && s.ScreenType == dto.ScreenType && s.SendBackApply == true) ||
|
|
|
- x.OrderScreens.Any() == false
|
|
|
- //|| x.OrderScreens.Any(s => (s.Status != EScreenStatus.SendBack && s.SendBackApply != true)) == false
|
|
|
- )
|
|
|
- .WhereIF(dto.ScreenType == EOrderScreenType.Seat, x => x.OrderVisit.Order.IsProvince == false)
|
|
|
- .WhereIF(dto.ScreenSendBack is 1,
|
|
|
- x => x.OrderScreens.Any(s => s.Status == EScreenStatus.SendBack && s.ScreenType == dto.ScreenType && s.SendBackApply == true))
|
|
|
- .WhereIF(dto.ScreenSendBack is 2,
|
|
|
- x => x.OrderScreens.Any(s => (s.Status != EScreenStatus.SendBack && s.ScreenType == dto.ScreenType && s.SendBackApply != true)) ==
|
|
|
- false)
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.No), x => x.OrderVisit.Order!.No!.Contains(dto.No!))
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.NameOrNo), x => x.OrderVisit.Order!.AcceptorName == dto.NameOrNo! || x.OrderVisit.Order!.AcceptorStaffNo == dto.NameOrNo!) //受理人/坐席
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.Title), x => x.OrderVisit.Order!.Title!.Contains(dto.Title!))
|
|
|
- .WhereIF(dto.IsProvince.HasValue, x => x.OrderVisit.Order!.IsProvince == dto.IsProvince)
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.AcceptType), x => x.OrderVisit.Order!.AcceptTypeCode! == dto.AcceptType!)
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.HotspotSpliceName),
|
|
|
- x => x.OrderVisit.Order!.Hotspot.HotSpotFullName!.StartsWith(dto.HotspotSpliceName!))
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.SourceChannel), x => x.OrderVisit.Order!.SourceChannelCode! == dto.SourceChannel!)
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.OrgLevelOneName), x => x.OrderVisit.Order!.OrgLevelOneName!.Contains(dto.OrgLevelOneName!))
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.CurrentHandleOrgName),
|
|
|
- x => x.OrderVisit.Order!.CurrentHandleOrgName!.Contains(dto.CurrentHandleOrgName!))
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.VisitOrgName), x => x.VisitOrgName!.Contains(dto.VisitOrgName!))
|
|
|
- .WhereIF(dto.CreationTime.HasValue && dto.EndCreationTime.HasValue,
|
|
|
- x => x.OrderVisit.Order!.CreationTime >= dto.CreationTime && x.OrderVisit.Order!.CreationTime <= dto.EndCreationTime)
|
|
|
- .WhereIF(dto.CurrentHandleTime.HasValue && dto.EndCurrentHandleTime.HasValue,
|
|
|
- x => x.OrderVisit.Order!.CurrentHandleTime >= dto.CurrentHandleTime &&
|
|
|
- x.OrderVisit.Order!.ActualHandleTime <= dto.EndCurrentHandleTime)
|
|
|
- .WhereIF(dto.FiledTime.HasValue && dto.EndFiledTime.HasValue,
|
|
|
- x => x.OrderVisit.Order!.FiledTime >= dto.FiledTime && x.OrderVisit.Order!.FiledTime <= dto.EndFiledTime)
|
|
|
- .WhereIF(dto.VisitTime.HasValue && dto.EndVisitTime.HasValue,
|
|
|
- x => x.OrderVisit.VisitTime >= dto.VisitTime && x.OrderVisit.VisitTime <= dto.EndVisitTime)
|
|
|
- .WhereIF(dto.IsHomePage.HasValue && dto.IsHomePage == true,
|
|
|
- x => x.OrderVisit.VisitTime < dto.CreationTimeEnd && x.OrderVisit.VisitTime > dto.CreationTimeStart)
|
|
|
- //.WhereIF(dto.CounterSignType.HasValue, x => x.OrderVisit.Order!.CounterSignType == dto.CounterSignType)
|
|
|
- //.WhereIF(!string.IsNullOrEmpty(dto.OrgProcessingResults),
|
|
|
- // x => SqlFunc.JsonField(x.OrgProcessingResults, "Key") == dto.OrgProcessingResults)
|
|
|
- //.WhereIF(!string.IsNullOrEmpty(dto.OrgHandledAttitude),
|
|
|
- // x => SqlFunc.JsonListObjectAny(x.OrgHandledAttitude, "Key", dto.OrgHandledAttitude))
|
|
|
- //.WhereIF(!string.IsNullOrEmpty(dto.OrgNoSatisfiedReason),
|
|
|
- // x => SqlFunc.JsonField(x.OrgNoSatisfiedReason, "Key") == dto.OrgNoSatisfiedReason)
|
|
|
- .Where(x => x.OrderVisit.VisitState == EVisitState.Visited && x.OrderVisit.IsCanHandle);
|
|
|
+ dto.ScreenType = dto.ScreenType is null ? 0 : dto.ScreenType;
|
|
|
+ var query = _orderVisitedDetailRepository.Queryable(false, true)
|
|
|
+ .Includes(x => x.OrderVisit)
|
|
|
+ .Includes(x => x.OrderVisit, y => y.Order)
|
|
|
+ .Includes(x => x.OrderVisit, y => y.Employee)
|
|
|
+ //.LeftJoin<OrderScreen>((x, s) => x.Id == s.VisitDetailId && s.IsDeleted == false)
|
|
|
+ .Includes(x => x.OrderScreens)
|
|
|
+ .Where(x => x.OrderScreens.Any(s => s.Status == EScreenStatus.SendBack && s.ScreenType == dto.ScreenType && s.SendBackApply == true) ||
|
|
|
+ x.OrderScreens.Any() == false
|
|
|
+ //|| x.OrderScreens.Any(s => (s.Status != EScreenStatus.SendBack && s.SendBackApply != true)) == false
|
|
|
+ )
|
|
|
+ .WhereIF(dto.ScreenType == EOrderScreenType.Seat, x => x.OrderVisit.Order.IsProvince == false)
|
|
|
+ .WhereIF(dto.ScreenSendBack is 1,
|
|
|
+ x => x.OrderScreens.Any(s => s.Status == EScreenStatus.SendBack && s.ScreenType == dto.ScreenType && s.SendBackApply == true))
|
|
|
+ .WhereIF(dto.ScreenSendBack is 2,
|
|
|
+ x => x.OrderScreens.Any(s => (s.Status != EScreenStatus.SendBack && s.ScreenType == dto.ScreenType && s.SendBackApply != true)) ==
|
|
|
+ false)
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.No), x => x.OrderVisit.Order!.No!.Contains(dto.No!))
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.NameOrNo), x => x.OrderVisit.Order!.AcceptorName == dto.NameOrNo! || x.OrderVisit.Order!.AcceptorStaffNo == dto.NameOrNo!) //受理人/坐席
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.Title), x => x.OrderVisit.Order!.Title!.Contains(dto.Title!))
|
|
|
+ .WhereIF(dto.IsProvince.HasValue, x => x.OrderVisit.Order!.IsProvince == dto.IsProvince)
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.AcceptType), x => x.OrderVisit.Order!.AcceptTypeCode! == dto.AcceptType!)
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.HotspotSpliceName),
|
|
|
+ x => x.OrderVisit.Order!.Hotspot.HotSpotFullName!.StartsWith(dto.HotspotSpliceName!))
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.SourceChannel), x => x.OrderVisit.Order!.SourceChannelCode! == dto.SourceChannel!)
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.OrgLevelOneName), x => x.OrderVisit.Order!.OrgLevelOneName!.Contains(dto.OrgLevelOneName!))
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.CurrentHandleOrgName),
|
|
|
+ x => x.OrderVisit.Order!.CurrentHandleOrgName!.Contains(dto.CurrentHandleOrgName!))
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.VisitOrgName), x => x.VisitOrgName!.Contains(dto.VisitOrgName!))
|
|
|
+ .WhereIF(dto.CreationTime.HasValue && dto.EndCreationTime.HasValue,
|
|
|
+ x => x.OrderVisit.Order!.CreationTime >= dto.CreationTime && x.OrderVisit.Order!.CreationTime <= dto.EndCreationTime)
|
|
|
+ .WhereIF(dto.CurrentHandleTime.HasValue && dto.EndCurrentHandleTime.HasValue,
|
|
|
+ x => x.OrderVisit.Order!.CurrentHandleTime >= dto.CurrentHandleTime &&
|
|
|
+ x.OrderVisit.Order!.ActualHandleTime <= dto.EndCurrentHandleTime)
|
|
|
+ .WhereIF(dto.FiledTime.HasValue && dto.EndFiledTime.HasValue,
|
|
|
+ x => x.OrderVisit.Order!.FiledTime >= dto.FiledTime && x.OrderVisit.Order!.FiledTime <= dto.EndFiledTime)
|
|
|
+ .WhereIF(dto.VisitTime.HasValue && dto.EndVisitTime.HasValue,
|
|
|
+ x => x.OrderVisit.VisitTime >= dto.VisitTime && x.OrderVisit.VisitTime <= dto.EndVisitTime)
|
|
|
+ .WhereIF(dto.IsHomePage.HasValue && dto.IsHomePage == true,
|
|
|
+ x => x.OrderVisit.VisitTime < dto.CreationTimeEnd && x.OrderVisit.VisitTime > dto.CreationTimeStart)
|
|
|
+ //.WhereIF(dto.CounterSignType.HasValue, x => x.OrderVisit.Order!.CounterSignType == dto.CounterSignType)
|
|
|
+ //.WhereIF(!string.IsNullOrEmpty(dto.OrgProcessingResults),
|
|
|
+ // x => SqlFunc.JsonField(x.OrgProcessingResults, "Key") == dto.OrgProcessingResults)
|
|
|
+ //.WhereIF(!string.IsNullOrEmpty(dto.OrgHandledAttitude),
|
|
|
+ // x => SqlFunc.JsonListObjectAny(x.OrgHandledAttitude, "Key", dto.OrgHandledAttitude))
|
|
|
+ //.WhereIF(!string.IsNullOrEmpty(dto.OrgNoSatisfiedReason),
|
|
|
+ // x => SqlFunc.JsonField(x.OrgNoSatisfiedReason, "Key") == dto.OrgNoSatisfiedReason)
|
|
|
+ .Where(x => x.OrderVisit.VisitState == EVisitState.Visited && x.OrderVisit.IsCanHandle);
|
|
|
if (_sessionContext.OrgId != null && !_sessionContext.OrgIsCenter)
|
|
|
{
|
|
|
query.WhereIF(!string.IsNullOrEmpty(dto.Keyword),
|
|
@@ -2733,18 +2708,18 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
|
//var order = await _orderRepository.Queryable().Includes(d => d.Workflow).FirstAsync(d => d.Id == dto.OrderId);
|
|
|
var sendBackAudit = await _orderSendBackAuditRepository.Queryable().Where(x => x.OrderId == dto.OrderId && x.State == ESendBackAuditState.Apply).ToListAsync(cancellationToken);
|
|
|
var orderDelay = await _orderDelayRepository.Queryable().Where(x => x.OrderId == dto.OrderId && x.DelayState == EDelayState.Examining).ToListAsync(cancellationToken);
|
|
|
- var orderSecondaries = await _orderSecondaryHandlingRepository.Queryable().Where(x=>x.OrderId == dto.OrderId && x.State == ESecondaryHandlingState.Apply).ToListAsync(cancellationToken);
|
|
|
+ var orderSecondaries = await _orderSecondaryHandlingRepository.Queryable().Where(x => x.OrderId == dto.OrderId && x.State == ESecondaryHandlingState.Apply).ToListAsync(cancellationToken);
|
|
|
|
|
|
- if (_appOptions.Value.IsYiBin)
|
|
|
+ if (_appOptions.Value.IsYiBin)
|
|
|
{
|
|
|
if (screen.Any())
|
|
|
{
|
|
|
- await _orderScreenRepository.RemoveRangeAsync(screen, false, cancellationToken);
|
|
|
+ await _orderScreenRepository.RemoveRangeAsync(screen, false, cancellationToken);
|
|
|
}
|
|
|
|
|
|
if (sendBackAudit.Any())
|
|
|
{
|
|
|
- await _orderSendBackAuditRepository.RemoveRangeAsync(sendBackAudit, false, cancellationToken);
|
|
|
+ await _orderSendBackAuditRepository.RemoveRangeAsync(sendBackAudit, false, cancellationToken);
|
|
|
}
|
|
|
|
|
|
if (orderDelay.Any())
|
|
@@ -2754,10 +2729,10 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
|
|
|
|
if (orderSecondaries.Any())
|
|
|
{
|
|
|
- await _orderSecondaryHandlingRepository.RemoveRangeAsync(orderSecondaries, false, cancellationToken);
|
|
|
+ await _orderSecondaryHandlingRepository.RemoveRangeAsync(orderSecondaries, false, cancellationToken);
|
|
|
}
|
|
|
|
|
|
- if (order.Workflow.IsInCountersign)
|
|
|
+ if (order.Workflow.IsInCountersign)
|
|
|
{
|
|
|
var workflowStep = await _workflowStepRepository.Queryable().Where(x => x.Id == order.Workflow.TopCountersignStepId).FirstAsync(cancellationToken);
|
|
|
if (workflowStep != null)
|
|
@@ -2783,13 +2758,13 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
|
var countersign = await _workflowCountersignRepository.GetAsync(dto.CountersignId, cancellationToken);
|
|
|
if (countersign is null)
|
|
|
throw new UserFriendlyException("无效会签编号");
|
|
|
-
|
|
|
+
|
|
|
var order = await _orderRepository.GetAsync(d => d.WorkflowId == countersign.WorkflowId, cancellationToken);
|
|
|
if (order is null)
|
|
|
throw new UserFriendlyException($"工单未开启流程, workflowId: {countersign.WorkflowId}");
|
|
|
-
|
|
|
+
|
|
|
var workflow = await _workflowDomainService.TerminalCountersignAsync(countersign, order.ExpiredTime.Value, cancellationToken);
|
|
|
-
|
|
|
+
|
|
|
order.UpdateHandlingStatus(workflow.IsInCountersign);
|
|
|
_mapper.Map(workflow, order);
|
|
|
await _orderRepository.UpdateAsync(order, cancellationToken);
|
|
@@ -2813,12 +2788,12 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
|
if (order == null)
|
|
|
{
|
|
|
order = _mapper.Map<Order>(dto);
|
|
|
-
|
|
|
+
|
|
|
order.InitId();
|
|
|
if (files != null && files.Any())
|
|
|
order.FileJson = await _fileRepository.AddFileAsync(files, order.Id, "", cancellationToken);
|
|
|
await _orderDomainService.AddAsync(order, cancellationToken: cancellationToken);
|
|
|
-
|
|
|
+
|
|
|
}
|
|
|
else
|
|
|
{
|
|
@@ -2929,10 +2904,10 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
|
order.Status = EOrderStatus.WaitForAccept;
|
|
|
if (isPaiDan)
|
|
|
{
|
|
|
- order.Status = EOrderStatus.Handling;
|
|
|
+ order.Status = EOrderStatus.Handling;
|
|
|
}
|
|
|
//await _orderRepository.Updateable().SetColumns(o => new Order { Status = status }).Where(o => o.Id == order.Id).ExecuteCommandAsync(cancellationToken);
|
|
|
-
|
|
|
+
|
|
|
//处理回访和发布信息
|
|
|
|
|
|
var publish = await _orderPublishRepository.GetAsync(x => x.OrderId == order.Id);
|
|
@@ -2961,7 +2936,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
|
await _orderRepository.UpdateAsync(order, cancellationToken);
|
|
|
//await _workflowDomainService.RecallToStartStepAsync(order.WorkflowId, "省工单重派", current, cancellationToken);
|
|
|
}
|
|
|
- return _mapper.Map<AddOrderResponse>(order);
|
|
|
+ return _mapper.Map<AddOrderResponse>(order);
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
@@ -3156,26 +3131,54 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
|
: d is EOrderStatus.WaitForAccept or EOrderStatus.BackToUnAccept or EOrderStatus.SpecialToUnAccept or EOrderStatus.HandOverToUnAccept or EOrderStatus.Handling)
|
|
|
.ToArray();
|
|
|
|
|
|
- var query = _orderRepository.Queryable();
|
|
|
- if (dto.IsHandled.HasValue)
|
|
|
- {
|
|
|
- var hasHandled = dto.IsHandled.Value;
|
|
|
- query = query.Where(d => SqlFunc.Subqueryable<WorkflowTrace>()
|
|
|
- .Where(step => step.ExternalId == d.Id &&
|
|
|
- (hasHandled || step.Status != EWorkflowStepStatus.Handled) &&
|
|
|
- (!hasHandled || step.Status == EWorkflowStepStatus.Handled &&
|
|
|
- step.TraceState != EWorkflowTraceState.StepRemoveByPrevious) &&
|
|
|
- ((step.FlowAssignType == EFlowAssignType.User && !string.IsNullOrEmpty(step.HandlerId) &&
|
|
|
- step.HandlerId == _sessionContextProvider.SessionContext.RequiredUserId) ||
|
|
|
- (step.FlowAssignType == EFlowAssignType.Org && !string.IsNullOrEmpty(step.HandlerOrgId) &&
|
|
|
- step.HandlerOrgId == _sessionContextProvider.SessionContext.RequiredOrgId) ||
|
|
|
- (step.FlowAssignType == EFlowAssignType.Role && !string.IsNullOrEmpty(step.RoleId) &&
|
|
|
- _sessionContextProvider.SessionContext.Roles.Contains(step.RoleId)))).Any() ||
|
|
|
- (string.IsNullOrEmpty(d.WorkflowId) &&
|
|
|
- (string.IsNullOrEmpty(d.SignerId) || d.SignerId == _sessionContextProvider.SessionContext.RequiredUserId))
|
|
|
+ var query = _orderRepository.Queryable()
|
|
|
+ .Includes(d => d.WorkflowTraces.Where(step =>
|
|
|
+ ((step.FlowAssignType == EFlowAssignType.User && !string.IsNullOrEmpty(step.HandlerId) && step.HandlerId == _sessionContext.RequiredUserId) ||
|
|
|
+ (step.FlowAssignType == EFlowAssignType.Org && !string.IsNullOrEmpty(step.HandlerOrgId) && step.HandlerOrgId == _sessionContext.RequiredOrgId) ||
|
|
|
+ (step.FlowAssignType == EFlowAssignType.Role && !string.IsNullOrEmpty(step.RoleId) && _sessionContext.Roles.Contains(step.RoleId)) ||
|
|
|
+ (step.FlowAssignType == EFlowAssignType.OrgAndRole && !string.IsNullOrEmpty(step.RoleId) && _sessionContext.Roles.Contains(step.RoleId)
|
|
|
+ && !string.IsNullOrEmpty(step.HandlerOrgId) && step.HandlerOrgId == _sessionContext.RequiredOrgId)))
|
|
|
+ .OrderByDescending(step => step.CreationTime)
|
|
|
+ .Take(1)
|
|
|
+ .ToList()
|
|
|
);
|
|
|
+
|
|
|
+ var hasHandled = dto.IsHandled.HasValue && dto.IsHandled.Value;
|
|
|
+ if (hasHandled)
|
|
|
+ {
|
|
|
+ query.Where(d => d.WorkflowSteps
|
|
|
+ .Any(step =>
|
|
|
+ ((step.FlowAssignType == EFlowAssignType.User && !string.IsNullOrEmpty(step.HandlerId) && step.HandlerId == _sessionContext.RequiredUserId) ||
|
|
|
+ (step.FlowAssignType == EFlowAssignType.Org && !string.IsNullOrEmpty(step.HandlerOrgId) && step.HandlerOrgId == _sessionContext.RequiredOrgId) ||
|
|
|
+ (step.FlowAssignType == EFlowAssignType.Role && !string.IsNullOrEmpty(step.RoleId) && _sessionContext.Roles.Contains(step.RoleId)) ||
|
|
|
+ (step.FlowAssignType == EFlowAssignType.OrgAndRole && !string.IsNullOrEmpty(step.RoleId) && _sessionContext.Roles.Contains(step.RoleId)
|
|
|
+ && !string.IsNullOrEmpty(step.HandlerOrgId) && step.HandlerOrgId == _sessionContext.RequiredOrgId))
|
|
|
+ && step.Status == EWorkflowStepStatus.Handled));
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ query.Where(d => d.WorkflowSteps
|
|
|
+ .Any(step =>
|
|
|
+ ((step.FlowAssignType == EFlowAssignType.User && !string.IsNullOrEmpty(step.HandlerId) && step.HandlerId == _sessionContext.RequiredUserId) ||
|
|
|
+ (step.FlowAssignType == EFlowAssignType.Org && !string.IsNullOrEmpty(step.HandlerOrgId) && step.HandlerOrgId == _sessionContext.RequiredOrgId) ||
|
|
|
+ (step.FlowAssignType == EFlowAssignType.Role && !string.IsNullOrEmpty(step.RoleId) && _sessionContext.Roles.Contains(step.RoleId)) ||
|
|
|
+ (step.FlowAssignType == EFlowAssignType.OrgAndRole && !string.IsNullOrEmpty(step.RoleId) && _sessionContext.Roles.Contains(step.RoleId)
|
|
|
+ && !string.IsNullOrEmpty(step.HandlerOrgId) && step.HandlerOrgId == _sessionContext.RequiredOrgId))
|
|
|
+ && step.Status < EWorkflowStepStatus.Handled));
|
|
|
}
|
|
|
|
|
|
+ //query = query.Where(d => SqlFunc.Subqueryable<WorkflowTrace>()
|
|
|
+ //.Where(step => step.ExternalId == d.Id &&
|
|
|
+ // (hasHandled || step.Status != EWorkflowStepStatus.Handled) &&
|
|
|
+ // (!hasHandled || step.Status == EWorkflowStepStatus.Handled &&
|
|
|
+ // step.TraceState != EWorkflowTraceState.StepRemoveByPrevious) &&
|
|
|
+ // ((step.FlowAssignType == EFlowAssignType.User && !string.IsNullOrEmpty(step.HandlerId) && step.HandlerId == _sessionContextProvider.SessionContext.RequiredUserId) ||
|
|
|
+ // (step.FlowAssignType == EFlowAssignType.Org && !string.IsNullOrEmpty(step.HandlerOrgId) && step.HandlerOrgId == _sessionContextProvider.SessionContext.RequiredOrgId) ||
|
|
|
+ // (step.FlowAssignType == EFlowAssignType.Role && !string.IsNullOrEmpty(step.RoleId) && _sessionContextProvider.SessionContext.Roles.Contains(step.RoleId)))).Any() ||
|
|
|
+ // (string.IsNullOrEmpty(d.WorkflowId) && (string.IsNullOrEmpty(d.SignerId) || d.SignerId == _sessionContextProvider.SessionContext.RequiredUserId))
|
|
|
+ //);
|
|
|
+
|
|
|
+
|
|
|
return query
|
|
|
// 交办件:已派单其他节点的工单,该选项卡下工单若办结就不显示
|
|
|
.WhereIF(dto.TypeCode.HasValue == true && dto.TypeCode == 1, d => d.ProcessType == EProcessType.Jiaoban && d.Status < EOrderStatus.Filed)
|
|
@@ -3215,6 +3218,108 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
|
.Select<OrderListOutDto>();
|
|
|
}
|
|
|
|
|
|
+ public ISugarQueryable<Order> QueryWaited(QueryOrderWaitedDto dto)
|
|
|
+ {
|
|
|
+ var query = _orderRepository.Queryable()
|
|
|
+ .Includes(d => d.WorkflowSteps.Where(step =>
|
|
|
+ ((step.FlowAssignType == EFlowAssignType.User && !string.IsNullOrEmpty(step.HandlerId) && step.HandlerId == _sessionContext.RequiredUserId) ||
|
|
|
+ (step.FlowAssignType == EFlowAssignType.Org && !string.IsNullOrEmpty(step.HandlerOrgId) && step.HandlerOrgId == _sessionContext.RequiredOrgId) ||
|
|
|
+ (step.FlowAssignType == EFlowAssignType.Role && !string.IsNullOrEmpty(step.RoleId) && _sessionContext.Roles.Contains(step.RoleId)) ||
|
|
|
+ (step.FlowAssignType == EFlowAssignType.OrgAndRole && !string.IsNullOrEmpty(step.RoleId) && _sessionContext.Roles.Contains(step.RoleId)
|
|
|
+ && !string.IsNullOrEmpty(step.HandlerOrgId) && step.HandlerOrgId == _sessionContext.RequiredOrgId)))
|
|
|
+ .OrderByDescending(step => step.CreationTime)
|
|
|
+ .Take(1)
|
|
|
+ .ToList()
|
|
|
+ );
|
|
|
+ var hasHandled = dto.IsHandled.HasValue && dto.IsHandled.Value;
|
|
|
+ if (hasHandled)
|
|
|
+ dto.QueryType = null;
|
|
|
+
|
|
|
+ var isAdmin = _orderDomainService.IsCheckAdmin();
|
|
|
+ if (!isAdmin)
|
|
|
+ {
|
|
|
+ //query.Includes(d => d.WorkflowSteps.Where(step =>
|
|
|
+ // ((step.FlowAssignType == EFlowAssignType.User && !string.IsNullOrEmpty(step.HandlerId) && step.HandlerId == _sessionContext.RequiredUserId) ||
|
|
|
+ // (step.FlowAssignType == EFlowAssignType.Org && !string.IsNullOrEmpty(step.HandlerOrgId) && step.HandlerOrgId == _sessionContext.RequiredOrgId) ||
|
|
|
+ // (step.FlowAssignType == EFlowAssignType.Role && !string.IsNullOrEmpty(step.RoleId) && _sessionContext.Roles.Contains(step.RoleId)) ||
|
|
|
+ // (step.FlowAssignType == EFlowAssignType.OrgAndRole && !string.IsNullOrEmpty(step.RoleId) && _sessionContext.Roles.Contains(step.RoleId)
|
|
|
+ // && !string.IsNullOrEmpty(step.HandlerOrgId) && step.HandlerOrgId == _sessionContext.RequiredOrgId)))
|
|
|
+ // .OrderByDescending(step => step.CreationTime)
|
|
|
+ // .Take(1)
|
|
|
+ // .ToList()
|
|
|
+ // );
|
|
|
+
|
|
|
+ if (hasHandled)
|
|
|
+ {
|
|
|
+ query.Where(d => d.WorkflowSteps
|
|
|
+ .Any(step =>
|
|
|
+ ((step.FlowAssignType == EFlowAssignType.User && !string.IsNullOrEmpty(step.HandlerId) && step.HandlerId == _sessionContext.RequiredUserId) ||
|
|
|
+ (step.FlowAssignType == EFlowAssignType.Org && !string.IsNullOrEmpty(step.HandlerOrgId) && step.HandlerOrgId == _sessionContext.RequiredOrgId) ||
|
|
|
+ (step.FlowAssignType == EFlowAssignType.Role && !string.IsNullOrEmpty(step.RoleId) && _sessionContext.Roles.Contains(step.RoleId)) ||
|
|
|
+ (step.FlowAssignType == EFlowAssignType.OrgAndRole && !string.IsNullOrEmpty(step.RoleId) && _sessionContext.Roles.Contains(step.RoleId)
|
|
|
+ && !string.IsNullOrEmpty(step.HandlerOrgId) && step.HandlerOrgId == _sessionContext.RequiredOrgId))
|
|
|
+ && step.Status == EWorkflowStepStatus.Handled));
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ query.Where(d => d.WorkflowSteps
|
|
|
+ .Any(step =>
|
|
|
+ ((step.FlowAssignType == EFlowAssignType.User && !string.IsNullOrEmpty(step.HandlerId) && step.HandlerId == _sessionContext.RequiredUserId) ||
|
|
|
+ (step.FlowAssignType == EFlowAssignType.Org && !string.IsNullOrEmpty(step.HandlerOrgId) && step.HandlerOrgId == _sessionContext.RequiredOrgId) ||
|
|
|
+ (step.FlowAssignType == EFlowAssignType.Role && !string.IsNullOrEmpty(step.RoleId) && _sessionContext.Roles.Contains(step.RoleId)) ||
|
|
|
+ (step.FlowAssignType == EFlowAssignType.OrgAndRole && !string.IsNullOrEmpty(step.RoleId) && _sessionContext.Roles.Contains(step.RoleId)
|
|
|
+ && !string.IsNullOrEmpty(step.HandlerOrgId) && step.HandlerOrgId == _sessionContext.RequiredOrgId))
|
|
|
+ && step.Status < EWorkflowStepStatus.Handled));
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ query.Where(d => d.Status != EOrderStatus.WaitForAccept &&
|
|
|
+ d.Status != EOrderStatus.BackToUnAccept &&
|
|
|
+ d.Status != EOrderStatus.SpecialToUnAccept &&
|
|
|
+ d.Status != EOrderStatus.HandOverToUnAccept)
|
|
|
+ .WhereIF(dto.QueryType is 3,
|
|
|
+ d => SqlFunc.Subqueryable<OrderSpecial>().Where(os => os.OrderId == d.Id && os.IsDeleted == false && os.SpecialType == ESpecialType.ReTransact).Any())
|
|
|
+ .Where(d => SqlFunc.Subqueryable<OrderDelay>().Where(od => od.OrderId == d.Id && od.IsDeleted == false && od.DelayState == EDelayState.Examining).NotAny())
|
|
|
+ .Where(d => SqlFunc.Subqueryable<OrderSendBackAudit>().Where(osba => osba.OrderId == d.Id && osba.IsDeleted == false && osba.State == ESendBackAuditState.Apply)
|
|
|
+ .NotAny())
|
|
|
+ .Where(d => SqlFunc.Subqueryable<OrderSpecial>().Where(s => s.OrderId == d.Id && s.State == 0 && s.IsDeleted == false)
|
|
|
+ .WhereIF(dto.QueryType != null && (dto.QueryType == 1 || dto.QueryType == 2), s => s.SpecialType == ESpecialType.ReTransact)
|
|
|
+ //.WhereIF(dto.QueryType != null && dto.QueryType == 3, s => s.SpecialType != ESpecialType.ReTransact)
|
|
|
+ .NotAny())
|
|
|
+ .WhereIF(dto.IsProvince.HasValue, d => d.IsProvince == dto.IsProvince)
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.Keyword), d => d.Title.StartsWith(dto.Keyword))
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.No), d => d.No == dto.No)
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.AreaCode), d => d.AreaCode == dto.AreaCode)
|
|
|
+ .WhereIF(dto.IsCounterSign.HasValue && dto.IsCounterSign == true, d => d.CounterSignType.HasValue)
|
|
|
+ .WhereIF(dto.IsCounterSign.HasValue && dto.IsCounterSign == false, d => d.CounterSignType == null)
|
|
|
+ .WhereIF(dto.ExpiredOrAlmostOverdue.HasValue && dto.ExpiredOrAlmostOverdue == true,
|
|
|
+ d => (d.ExpiredTime < DateTime.Now && d.Status < EOrderStatus.Filed) ||
|
|
|
+ (d.ExpiredTime < d.ActualHandleTime && d.Status >= EOrderStatus.Filed)) //超期 未办
|
|
|
+ .WhereIF(dto.ExpiredOrAlmostOverdue.HasValue && dto.ExpiredOrAlmostOverdue == false,
|
|
|
+ d => d.NearlyExpiredTime < DateTime.Now && d.ExpiredTime > DateTime.Now) //即将超期 未办
|
|
|
+ .Where(d => d.Source < ESource.MLSQ || d.Source > ESource.WZSC)
|
|
|
+ .Where(d => d.Status != EOrderStatus.BackToProvince)
|
|
|
+ .WhereIF(!hasHandled, d => d.Status < EOrderStatus.Filed)
|
|
|
+ //.Where(d => SqlFunc.Subqueryable<OrderSpecial>().Where(os => os.OrderId == d.Id).NotAny())
|
|
|
+ //.Where(d => d.OrderSpecials.Any() == false || d.OrderSpecials.Any(s => s.State > 0))
|
|
|
+ .WhereIF(dto.StartTime.HasValue, d => d.StartTime >= dto.StartTime)
|
|
|
+ .WhereIF(dto.EndTime.HasValue, d => d.StartTime <= dto.EndTime)
|
|
|
+ .WhereIF(dto.IsUrgent.HasValue, d => d.IsUrgent == dto.IsUrgent!.Value)
|
|
|
+ .WhereIF(dto.Status.HasValue, d => d.Status == dto.Status)
|
|
|
+ //.OrderByDescending(d => d.IsUrgent)
|
|
|
+ .OrderByIF(string.IsNullOrEmpty(dto.SortField), d => d.StartTime, OrderByType.Desc)
|
|
|
+ .OrderByIF(dto is { SortField: "creationTime", SortRule: 0 }, d => d.CreationTime, OrderByType.Asc) //创建时间升序
|
|
|
+ .OrderByIF(dto is { SortField: "creationTime", SortRule: 1 }, d => d.CreationTime, OrderByType.Desc) //创建时间降序
|
|
|
+ .OrderByIF(dto is { SortField: "startTime", SortRule: 0 }, d => d.StartTime, OrderByType.Asc) //受理时间升序
|
|
|
+ .OrderByIF(dto is { SortField: "startTime", SortRule: 1 }, d => d.StartTime, OrderByType.Desc) //受理时间降序
|
|
|
+ .OrderByIF(dto is { SortField: "expiredTime", SortRule: 0 }, d => d.ExpiredTime, OrderByType.Asc) //期满时间升序
|
|
|
+ .OrderByIF(dto is { SortField: "expiredTime", SortRule: 1 }, d => d.ExpiredTime, OrderByType.Desc) //期满时间降序
|
|
|
+ ;
|
|
|
+
|
|
|
+ return query;
|
|
|
+ }
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// 受理前十
|
|
|
/// </summary>
|