|
@@ -8,6 +8,7 @@ using Microsoft.AspNetCore.Http;
|
|
|
using System.Threading;
|
|
|
using Hotline.BatchTask;
|
|
|
using Hotline.Orders;
|
|
|
+using Hotline.Share.Dtos.BatchTask;
|
|
|
using Hotline.Share.Dtos.Order;
|
|
|
using Hotline.Share.Enums.BatchTask;
|
|
|
using Hotline.Share.Enums.Order;
|
|
@@ -15,6 +16,7 @@ using SqlSugar;
|
|
|
using XF.Domain.Authentications;
|
|
|
using XF.Domain.Dependency;
|
|
|
using XF.Domain.Entities;
|
|
|
+using XF.Domain.Exceptions;
|
|
|
|
|
|
namespace Hotline.Application.OrderApp.OrderDelayApp;
|
|
|
|
|
@@ -23,6 +25,7 @@ public class OrderDelayApplication : IOrderDelayApplication, IScopeDependency
|
|
|
private readonly IOrderDomainService _orderDomainService;
|
|
|
private readonly IOrderDelayRepository _orderDelayRepository;
|
|
|
private readonly IWorkflowDomainService _workflowDomainService;
|
|
|
+ private readonly IApptaskDomainService _apptaskDomainService;
|
|
|
private readonly ISessionContext _sessionContext;
|
|
|
private readonly IMapper _mapper;
|
|
|
|
|
@@ -30,18 +33,20 @@ public class OrderDelayApplication : IOrderDelayApplication, IScopeDependency
|
|
|
IOrderDomainService orderDomainService,
|
|
|
IOrderDelayRepository orderDelayRepository,
|
|
|
IWorkflowDomainService workflowDomainService,
|
|
|
+ IApptaskDomainService apptaskDomainService,
|
|
|
ISessionContext sessionContext,
|
|
|
IMapper mapper)
|
|
|
{
|
|
|
_orderDomainService = orderDomainService;
|
|
|
_orderDelayRepository = orderDelayRepository;
|
|
|
_workflowDomainService = workflowDomainService;
|
|
|
+ _apptaskDomainService = apptaskDomainService;
|
|
|
_sessionContext = sessionContext;
|
|
|
_mapper = mapper;
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
- /// 延期列表
|
|
|
+ /// 查询延期待审批列表
|
|
|
/// </summary>
|
|
|
/// <returns></returns>
|
|
|
public ISugarQueryable<OrderDelay> QueryWaited(DelayListDto dto)
|
|
@@ -49,20 +54,20 @@ public class OrderDelayApplication : IOrderDelayApplication, IScopeDependency
|
|
|
var isAdmin = _orderDomainService.IsCheckAdmin();
|
|
|
var hasHandled = dto.IsApply.HasValue && dto.IsApply.Value;
|
|
|
var query = _orderDelayRepository.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()
|
|
|
- );
|
|
|
+ .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 (!isAdmin)
|
|
|
{
|
|
@@ -100,34 +105,34 @@ public class OrderDelayApplication : IOrderDelayApplication, IScopeDependency
|
|
|
|
|
|
|
|
|
query.Includes(d => d.Order)
|
|
|
- .Includes(d => d.Workflow)
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.Keyword), d => d.Order.Title.Contains(dto.Keyword!) || d.No.Contains(dto.Keyword!))
|
|
|
- .WhereIF(dto.IsApply == false, d => d.DelayState == EDelayState.Examining)
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.No), d => d.Order.No.Contains(dto.No)) //工单编号
|
|
|
- .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, d => d.Order.IsProvince == true) //是否省工单
|
|
|
- .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == false, d => d.Order.IsProvince == false)
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.Title), d => d.Order.Title.Contains(dto.Title)) //工单标题
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.Channel), d => d.Order.SourceChannelCode == dto.Channel) //来源渠道
|
|
|
- .WhereIF(dto.CreationTimeStart.HasValue, d => d.Order.CreationTime >= dto.CreationTimeStart) //受理时间Start
|
|
|
- .WhereIF(dto.CreationTimeEnd.HasValue, d => d.Order.CreationTime <= dto.CreationTimeEnd) //受理时间End
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.AcceptorName), d => d.Order.AcceptorName == dto.AcceptorName!) //受理人
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.Hotspot), d => d.Order.HotspotSpliceName != null && d.Order.HotspotSpliceName.Contains(dto.Hotspot)) //热点
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.AcceptTypeCode), d => d.Order.AcceptTypeCode == dto.AcceptTypeCode) //受理类型
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.OrgLevelOneName), d => d.Order.OrgLevelOneName.Contains(dto.OrgLevelOneName)) //一级部门
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.CurrentHandleOrgName), d => d.Order.CurrentHandleOrgName.Contains(dto.CurrentHandleOrgName)) //接办部门
|
|
|
- .WhereIF(dto.CurrentHandleTimeStart.HasValue, d => d.Order.CurrentHandleTime >= dto.CurrentHandleTimeStart) //接办时间Start
|
|
|
- .WhereIF(dto.CurrentHandleTimeEnd.HasValue, d => d.Order.CurrentHandleTime <= dto.CurrentHandleTimeEnd) //接办时间End
|
|
|
- .WhereIF(dto.ApplyTimeStart.HasValue, d => d.CreationTime >= dto.ApplyTimeStart) //延期申请时间Start
|
|
|
- .WhereIF(dto.ApplyTimeEnd.HasValue, d => d.CreationTime <= dto.ApplyTimeEnd) //延期申请时间End
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.ApplyName), d => d.CreatorName.Contains(dto.ApplyName)) //延期申请人
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.ApplyOrgName), d => d.CreatorOrgName.Contains(dto.ApplyOrgName)) //延期申请部门
|
|
|
- .WhereIF(dto.DelayNum.HasValue, d => d.DelayNum == dto.DelayNum) //延期申请时限
|
|
|
- .WhereIF(dto.DelayUnit.HasValue, d => d.DelayUnit == dto.DelayUnit) //延期申请单位
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.DelayReason), d => d.DelayReason.Contains(dto.DelayReason)) //申请理由
|
|
|
- .WhereIF(dto.BeforeDelayStart.HasValue, d => d.BeforeDelay >= dto.BeforeDelayStart) //申请前期满时间Start
|
|
|
- .WhereIF(dto.BeforeDelayEnd.HasValue, d => d.BeforeDelay <= dto.BeforeDelayEnd) //申请前期满时间End
|
|
|
- .OrderByDescending(d => d.ApplyDelayTime)
|
|
|
- ;
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.Keyword), d => d.Order.Title.Contains(dto.Keyword!) || d.No.Contains(dto.Keyword!))
|
|
|
+ .WhereIF(dto.IsApply == false, d => d.DelayState == EDelayState.Examining)
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.No), d => d.Order.No.Contains(dto.No)) //工单编号
|
|
|
+ .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, d => d.Order.IsProvince == true) //是否省工单
|
|
|
+ .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == false, d => d.Order.IsProvince == false)
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.Title), d => d.Order.Title.Contains(dto.Title)) //工单标题
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.Channel), d => d.Order.SourceChannelCode == dto.Channel) //来源渠道
|
|
|
+ .WhereIF(dto.CreationTimeStart.HasValue, d => d.Order.CreationTime >= dto.CreationTimeStart) //受理时间Start
|
|
|
+ .WhereIF(dto.CreationTimeEnd.HasValue, d => d.Order.CreationTime <= dto.CreationTimeEnd) //受理时间End
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.AcceptorName), d => d.Order.AcceptorName == dto.AcceptorName!) //受理人
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.Hotspot),
|
|
|
+ d => d.Order.HotspotSpliceName != null && d.Order.HotspotSpliceName.Contains(dto.Hotspot)) //热点
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.AcceptTypeCode), d => d.Order.AcceptTypeCode == dto.AcceptTypeCode) //受理类型
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.OrgLevelOneName), d => d.Order.OrgLevelOneName.Contains(dto.OrgLevelOneName)) //一级部门
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.CurrentHandleOrgName), d => d.Order.CurrentHandleOrgName.Contains(dto.CurrentHandleOrgName)) //接办部门
|
|
|
+ .WhereIF(dto.CurrentHandleTimeStart.HasValue, d => d.Order.CurrentHandleTime >= dto.CurrentHandleTimeStart) //接办时间Start
|
|
|
+ .WhereIF(dto.CurrentHandleTimeEnd.HasValue, d => d.Order.CurrentHandleTime <= dto.CurrentHandleTimeEnd) //接办时间End
|
|
|
+ .WhereIF(dto.ApplyTimeStart.HasValue, d => d.CreationTime >= dto.ApplyTimeStart) //延期申请时间Start
|
|
|
+ .WhereIF(dto.ApplyTimeEnd.HasValue, d => d.CreationTime <= dto.ApplyTimeEnd) //延期申请时间End
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.ApplyName), d => d.CreatorName.Contains(dto.ApplyName)) //延期申请人
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.ApplyOrgName), d => d.CreatorOrgName.Contains(dto.ApplyOrgName)) //延期申请部门
|
|
|
+ .WhereIF(dto.DelayNum.HasValue, d => d.DelayNum == dto.DelayNum) //延期申请时限
|
|
|
+ .WhereIF(dto.DelayUnit.HasValue, d => d.DelayUnit == dto.DelayUnit) //延期申请单位
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.DelayReason), d => d.DelayReason.Contains(dto.DelayReason)) //申请理由
|
|
|
+ .WhereIF(dto.BeforeDelayStart.HasValue, d => d.BeforeDelay >= dto.BeforeDelayStart) //申请前期满时间Start
|
|
|
+ .WhereIF(dto.BeforeDelayEnd.HasValue, d => d.BeforeDelay <= dto.BeforeDelayEnd) //申请前期满时间End
|
|
|
+ .OrderByDescending(d => d.ApplyDelayTime)
|
|
|
+ ;
|
|
|
|
|
|
return query;
|
|
|
}
|
|
@@ -175,26 +180,37 @@ public class OrderDelayApplication : IOrderDelayApplication, IScopeDependency
|
|
|
/// <returns></returns>
|
|
|
public async Task BatchReviewAsync(BatchOrderDelayReviewRequest request, CancellationToken cancellation)
|
|
|
{
|
|
|
+ var delayIds = request.DelayWithStepIds.Select(d => d.DelayId).Distinct().ToList();
|
|
|
var delays = await _orderDelayRepository.Queryable()
|
|
|
- .Where(d => request.DelayIds.Contains(d.Id))
|
|
|
+ .Where(d => delayIds.Contains(d.Id))
|
|
|
.ToListAsync(cancellation);
|
|
|
|
|
|
var apptaskItems = new List<ApptaskItem>();
|
|
|
foreach (var delay in delays)
|
|
|
{
|
|
|
- request.NextWorkflow.StepId = delay
|
|
|
+ var stepId = request.DelayWithStepIds.First(d => d.DelayId == delay.Id).StepId;
|
|
|
+ request.NextWorkflow.StepId = stepId;
|
|
|
+ apptaskItems.Add(new ApptaskItem
|
|
|
+ {
|
|
|
+ BusinessId = delay.Id,
|
|
|
+ TaskType = ETaskType.Delay,
|
|
|
+ TaskParams = System.Text.Json.JsonSerializer.Serialize(request.NextWorkflow)
|
|
|
+ });
|
|
|
}
|
|
|
|
|
|
- var taskparams = System.Text.Json.JsonSerializer.Serialize(request.NextWorkflow);
|
|
|
var apptask = new Apptask
|
|
|
{
|
|
|
TaskType = ETaskType.Delay,
|
|
|
- ApptaskItems = request.DelayIds.Select(d => new ApptaskItem
|
|
|
- {
|
|
|
- BusinessId = d,
|
|
|
- TaskType = ETaskType.Delay,
|
|
|
- TaskParams =
|
|
|
- })
|
|
|
+ ApptaskItems = apptaskItems,
|
|
|
+ };
|
|
|
+
|
|
|
+ //
|
|
|
+ var addApptask = new AddApptaskRequest
|
|
|
+ {
|
|
|
+
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+ _apptaskDomainService.AddAsync()
|
|
|
}
|
|
|
}
|