|
@@ -546,52 +546,64 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
|
|
|
/// <summary>
|
|
|
/// 查询撤回可选节点
|
|
|
/// </summary>
|
|
|
- public async Task<NextStepsDto> GetRecallStepsAsync(string workflowId, CancellationToken cancellationToken)
|
|
|
+ public async Task<RecallStepsDto> GetRecallStepsAsync(string workflowId, CancellationToken cancellationToken)
|
|
|
{
|
|
|
var workflow = await _workflowDomainService.GetWorkflowAsync(workflowId, true, true, cancellationToken: cancellationToken);
|
|
|
- var stepCodes = workflow.Steps.Where(d => d.StepType != EStepType.End && d.IsOrigin)
|
|
|
- .Select(d => d.Code).ToList();
|
|
|
+ var originSteps = workflow.Steps.Where(d => d.StepType != EStepType.End && d.IsOrigin).ToList();
|
|
|
+ var stepCodes = originSteps.Select(d => d.Code).ToList();
|
|
|
var stepDefines = workflow.WorkflowDefinition.FindStepDefines(stepCodes);
|
|
|
var currentStep = workflow.Steps.FirstOrDefault(d => d.Id == workflow.CurrentStepId);
|
|
|
if (currentStep is null)
|
|
|
throw new UserFriendlyException("无效当前节点编号");
|
|
|
- return new NextStepsDto
|
|
|
+
|
|
|
+ var dto = new RecallStepsDto
|
|
|
{
|
|
|
- Steps = await GetRecallConfigStepsAsync(workflow.Status is EWorkflowStatus.Completed,
|
|
|
- workflow.FlowType, currentStep.BusinessType, stepDefines, cancellationToken)
|
|
|
+ TimeTypeOptions = EnumExts.GetDescriptions<ETimeType>().ToList()
|
|
|
};
|
|
|
+
|
|
|
+ var steps = await GetRecallConfigStepsAsync(originSteps, stepDefines, currentStep,
|
|
|
+ workflow.FlowType,
|
|
|
+ workflow.Status is EWorkflowStatus.Completed,
|
|
|
+ cancellationToken);
|
|
|
+ dto.Steps = steps;
|
|
|
+
|
|
|
+ return dto;
|
|
|
}
|
|
|
|
|
|
- private async Task<IReadOnlyList<NextStepOption>> GetRecallConfigStepsAsync(
|
|
|
- bool isWorkflowFiled,
|
|
|
- EFlowType flowType,
|
|
|
- EBusinessType currentBusinessType,
|
|
|
- List<StepDefine> stepDefines,
|
|
|
- CancellationToken cancellationToken)
|
|
|
+ private async Task<List<RecallStepOption>> GetRecallConfigStepsAsync(
|
|
|
+ List<WorkflowStep> originSteps, List<StepDefine> stepDefines,
|
|
|
+ WorkflowStep currentStep, EFlowType flowType, bool isWorkflowFiled, CancellationToken cancellationToken)
|
|
|
{
|
|
|
- var stepOptions = new List<NextStepOption>();
|
|
|
- foreach (var stepDefine in stepDefines)
|
|
|
+ var steps = new List<RecallStepOption>();
|
|
|
+ foreach (var originStep in originSteps)
|
|
|
{
|
|
|
+ var stepDefine = stepDefines.First(d => d.Code == originStep.Code);
|
|
|
var nextStepOption = await GetConfigStepAsync(flowType, stepDefine, cancellationToken);
|
|
|
+ var stepOption = _mapper.Map<RecallStepOption>(nextStepOption);
|
|
|
if (stepDefine.StepType is EStepType.End)
|
|
|
{
|
|
|
- stepOptions.Add(nextStepOption);
|
|
|
+ steps.Add(stepOption);
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
- nextStepOption.InputRealHandler = false;
|
|
|
+ stepOption.InputRealHandler = false;
|
|
|
+
|
|
|
//已归档工单,撤回至中心看作otc,撤回至部门看作cto
|
|
|
- nextStepOption.FlowDirection = isWorkflowFiled
|
|
|
+ stepOption.FlowDirection = isWorkflowFiled
|
|
|
? stepDefine.BusinessType is EBusinessType.Center or EBusinessType.Send
|
|
|
? EFlowDirection.OrgToCenter
|
|
|
: stepDefine.BusinessType is EBusinessType.Department
|
|
|
? EFlowDirection.CenterToOrg
|
|
|
: null
|
|
|
- : CheckFlowDirection(currentBusinessType, stepDefine.BusinessType);
|
|
|
- stepOptions.Add(nextStepOption);
|
|
|
+ : CheckFlowDirection(currentStep.BusinessType, stepDefine.BusinessType);
|
|
|
+
|
|
|
+ stepOption.Handler =
|
|
|
+ originStep.NextHandlers.First(d => d.Key == originStep.HandlerId || d.Key == originStep.HandlerOrgId);
|
|
|
+
|
|
|
+ steps.Add(stepOption);
|
|
|
}
|
|
|
|
|
|
- return stepOptions;
|
|
|
+ return steps;
|
|
|
}
|
|
|
|
|
|
/// <summary>
|