|
@@ -495,7 +495,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
|
|
|
var countersignEndOption = GetCsEndStepByPrev(workflow.Steps, currentStep);
|
|
|
//按会签策略
|
|
|
var nextStepOption =
|
|
|
- await GetDynamicStepAsync(currentStep.CountersignPolicy.Value, currentStep.IsOrigin, currentStep.BusinessType, cancellationToken);
|
|
|
+ await GetDynamicStepAsync(currentStep.CountersignPolicy.Value, cancellationToken);
|
|
|
dto.Steps = new List<NextStepOption> { nextStepOption, countersignEndOption };
|
|
|
return dto;
|
|
|
}
|
|
@@ -534,13 +534,16 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
|
|
|
var stepCodes = workflow.Steps.Where(d => d.StepType != EStepType.End && d.IsOrigin)
|
|
|
.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
|
|
|
{
|
|
|
- Steps = await GetRecallConfigStepsAsync(stepDefines, cancellationToken)
|
|
|
+ Steps = await GetRecallConfigStepsAsync(workflow.Status is EWorkflowStatus.Completed, currentStep.BusinessType, stepDefines, cancellationToken)
|
|
|
};
|
|
|
}
|
|
|
|
|
|
- private async Task<IReadOnlyList<NextStepOption>> GetRecallConfigStepsAsync(List<StepDefine> stepDefines, CancellationToken cancellationToken)
|
|
|
+ private async Task<IReadOnlyList<NextStepOption>> GetRecallConfigStepsAsync(bool isWorkflowFiled, EBusinessType currentBusinessType, List<StepDefine> stepDefines, CancellationToken cancellationToken)
|
|
|
{
|
|
|
var stepOptions = new List<NextStepOption>();
|
|
|
foreach (var stepDefine in stepDefines)
|
|
@@ -553,13 +556,14 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
|
|
|
}
|
|
|
|
|
|
nextStepOption.InputRealHandler = false;
|
|
|
- //todo thk 派单->坐席, 会签中怎么界定当前节点?
|
|
|
- nextStepOption.FlowDirection =
|
|
|
- stepDefine.BusinessType is EBusinessType.Center or EBusinessType.Send
|
|
|
+ //已归档工单,撤回至中心看作otc,撤回至部门看作cto
|
|
|
+ nextStepOption.FlowDirection = isWorkflowFiled
|
|
|
+ ? stepDefine.BusinessType is EBusinessType.Center or EBusinessType.Send
|
|
|
? EFlowDirection.OrgToCenter
|
|
|
: stepDefine.BusinessType is EBusinessType.Department
|
|
|
? EFlowDirection.CenterToOrg
|
|
|
- : null;
|
|
|
+ : null
|
|
|
+ : CheckFlowDirection(currentBusinessType, stepDefine.BusinessType);
|
|
|
stepOptions.Add(nextStepOption);
|
|
|
}
|
|
|
|
|
@@ -708,14 +712,10 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
|
|
|
case EBusinessType.Send:
|
|
|
return directionStepBusinessType is EBusinessType.Department
|
|
|
? EFlowDirection.CenterToOrg
|
|
|
- : directionStepBusinessType is EBusinessType.File
|
|
|
- ? EFlowDirection.CenterToFile
|
|
|
- : EFlowDirection.CenterToCenter;
|
|
|
+ : null;
|
|
|
case EBusinessType.Department:
|
|
|
return directionStepBusinessType is EBusinessType.Center or EBusinessType.Send
|
|
|
? EFlowDirection.OrgToCenter
|
|
|
- : directionStepBusinessType is EBusinessType.Department
|
|
|
- ? EFlowDirection.OrgToOrg
|
|
|
: null;
|
|
|
case EBusinessType.File:
|
|
|
return null;
|
|
@@ -908,7 +908,6 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
|
|
|
Key = prevStep.Code,
|
|
|
Value = text, //parentStep.Name,//todo name不对,目前为definition.name,需改为x级部门办理
|
|
|
BackToCountersignEnd = true,
|
|
|
- BusinessType = prevStep.BusinessType,
|
|
|
Items = handlers //new List<Kv> { new(prevStep.HandlerId, prevStep.HandlerName) },
|
|
|
};
|
|
|
}
|
|
@@ -948,12 +947,10 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
|
|
|
};
|
|
|
}
|
|
|
|
|
|
- private async Task<NextStepOption> GetDynamicStepAsync(EDynamicPolicy policy, bool isOrigin,
|
|
|
- EBusinessType currentBusinessType, CancellationToken cancellationToken)
|
|
|
+ private async Task<NextStepOption> GetDynamicStepAsync(EDynamicPolicy policy, CancellationToken cancellationToken)
|
|
|
{
|
|
|
int orgLevel;
|
|
|
List<Kv> items;
|
|
|
- EFlowDirection flowDirection;
|
|
|
var levelOneOrgCode = _sessionContext.RequiredOrgId.GetHigherOrgCode();
|
|
|
switch (policy)
|
|
|
{
|
|
@@ -967,7 +964,6 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
|
|
|
.Where(d => d.IsCenter)
|
|
|
.Select(d => new Kv { Key = d.Id, Value = d.Name })
|
|
|
.ToListAsync(cancellationToken);
|
|
|
- flowDirection =
|
|
|
}
|
|
|
else
|
|
|
{
|
|
@@ -975,7 +971,6 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
|
|
|
.Where(d => !d.IsCenter && d.Level == orgLevel && d.Id.StartsWith(levelOneOrgCode))
|
|
|
.Select(d => new Kv { Key = d.Id, Value = d.Name })
|
|
|
.ToListAsync(cancellationToken);
|
|
|
- businessType = EBusinessType.Department;
|
|
|
}
|
|
|
|
|
|
break;
|
|
@@ -986,11 +981,6 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
|
|
|
.Where(d => d.Level == orgLevel && d.Id.StartsWith(levelOneOrgCode))
|
|
|
.Select(d => new Kv { Key = d.Id, Value = d.Name })
|
|
|
.ToListAsync(cancellationToken);
|
|
|
- businessType = _sessionContext.OrgIsCenter
|
|
|
- ? EBusinessType.Center
|
|
|
- : _sessionContext.OrgLevel == 1
|
|
|
- ? EBusinessType.Center
|
|
|
- : EBusinessType.Department;
|
|
|
break;
|
|
|
case EDynamicPolicy.OrgDownCenterTop:
|
|
|
if (_sessionContext.OrgIsCenter)
|
|
@@ -1010,7 +1000,6 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
|
|
|
.ToListAsync(cancellationToken);
|
|
|
}
|
|
|
|
|
|
- businessType = EBusinessType.Department;
|
|
|
break;
|
|
|
case EDynamicPolicy.OrgDown:
|
|
|
orgLevel = _sessionContext.OrgLevel + 1;
|
|
@@ -1018,7 +1007,6 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
|
|
|
.Where(d => d.Level == orgLevel && d.Id.StartsWith(levelOneOrgCode))
|
|
|
.Select(d => new Kv { Key = d.Id, Value = d.Name })
|
|
|
.ToListAsync(cancellationToken);
|
|
|
- businessType = EBusinessType.Department;
|
|
|
break;
|
|
|
default:
|
|
|
throw new ArgumentOutOfRangeException(nameof(policy), policy, null);
|
|
@@ -1028,7 +1016,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
|
|
|
{
|
|
|
Key = orgLevel.ToString(),
|
|
|
Value = orgLevel == 0 ? "热线中心" : $"{orgLevel.ToChinese()}级部门",
|
|
|
- BusinessType = businessType,
|
|
|
+ FlowDirection = null,
|
|
|
Items = items
|
|
|
};
|
|
|
}
|