|
@@ -915,13 +915,13 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
{
|
|
|
if (dto.IsStartCountersign)
|
|
|
{
|
|
|
- //todo 依据会签策略创建会签下一级节点
|
|
|
+ //依据会签策略创建会签下一级节点
|
|
|
nextSteps = await CreateCountersignStepsAsync(workflow, nextStepDefine, currentStep, dto,
|
|
|
flowAssignInfo.FlowAssignType, cancellationToken);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- //todo 创建普通节点(根据配置)
|
|
|
+ //创建普通节点(根据配置)
|
|
|
nextSteps = await CreateConfigStepsAsync(workflow, nextStepDefine, currentStep, dto,
|
|
|
flowAssignInfo, EWorkflowTraceStatus.Normal, cancellationToken);
|
|
|
}
|
|
@@ -948,7 +948,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- //todo 依据会签策略创建会签下一级节点
|
|
|
+ //依据会签策略创建会签下一级节点
|
|
|
nextSteps = await CreateCountersignStepsAsync(workflow, nextStepDefine, currentStep, dto,
|
|
|
flowAssignInfo.FlowAssignType, cancellationToken);
|
|
|
}
|
|
@@ -956,20 +956,19 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
}
|
|
|
else if (dto.IsStartCountersign) //top
|
|
|
{
|
|
|
- //todo 依据会签策略创建会签下一级节点
|
|
|
+ //依据会签策略创建会签下一级节点
|
|
|
nextSteps = await CreateCountersignStepsAsync(workflow, nextStepDefine, currentStep, dto,
|
|
|
flowAssignInfo.FlowAssignType, cancellationToken);
|
|
|
}
|
|
|
else if (currentStep.InstanceMode is EInstanceMode.Dynamic && !currentStep.DynamicShouldTerminal())
|
|
|
{
|
|
|
- //todo 创建动态下一级节点
|
|
|
- nextSteps = await CreateStepsAsync(workflow, nextStepDefine, currentStep, dto,
|
|
|
- flowAssignInfo.FlowAssignType, dto.NextHandlers, null, EWorkflowStepStatus.WaitForAccept,
|
|
|
- ECountersignPosition.None, false, EWorkflowTraceStatus.Normal, cancellationToken);
|
|
|
+ //创建动态下一级节点
|
|
|
+ nextSteps = await CreateDynamicStepsAsync(workflow, nextStepDefine, currentStep, dto, flowAssignInfo,
|
|
|
+ cancellationToken);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- //todo 创建普通节点(根据配置)
|
|
|
+ //创建普通节点(根据配置)
|
|
|
nextSteps = await CreateConfigStepsAsync(workflow, nextStepDefine, currentStep, dto, flowAssignInfo,
|
|
|
EWorkflowTraceStatus.Normal, cancellationToken);
|
|
|
}
|
|
@@ -977,6 +976,29 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
return nextSteps;
|
|
|
}
|
|
|
|
|
|
+ private async Task<List<WorkflowStep>> CreateDynamicStepsAsync(
|
|
|
+ Workflow workflow,
|
|
|
+ StepDefine nextStepDefine,
|
|
|
+ WorkflowStep prevStep,
|
|
|
+ BasicWorkflowDto dto,
|
|
|
+ FlowAssignInfo flowAssignInfo,
|
|
|
+ CancellationToken cancellationToken)
|
|
|
+ {
|
|
|
+ var handlerType = nextStepDefine.InstancePolicy switch
|
|
|
+ {
|
|
|
+ EDynamicPolicy.OrgUpCenterTop => EHandlerType.OrgLevel,
|
|
|
+ EDynamicPolicy.OrgUp => EHandlerType.OrgLevel,
|
|
|
+ EDynamicPolicy.OrgDownCenterTop => EHandlerType.OrgLevel,
|
|
|
+ EDynamicPolicy.OrgDown => EHandlerType.OrgLevel,
|
|
|
+ null => throw new ArgumentOutOfRangeException(),
|
|
|
+ _ => throw new ArgumentOutOfRangeException()
|
|
|
+ };
|
|
|
+
|
|
|
+ return await CreateStepsAsync(workflow, nextStepDefine, prevStep, dto,
|
|
|
+ flowAssignInfo.FlowAssignType, dto.NextHandlers, null, EWorkflowStepStatus.WaitForAccept,
|
|
|
+ ECountersignPosition.None, false, EWorkflowTraceStatus.Normal, handlerType, cancellationToken);
|
|
|
+ }
|
|
|
+
|
|
|
private Task<List<WorkflowStep>> CreateCountersignStepsAsync(
|
|
|
Workflow workflow,
|
|
|
StepDefine stepDefine,
|
|
@@ -989,10 +1011,20 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
{
|
|
|
var countersignId = prevStep.IsStartCountersign ? prevStep.StartCountersignId : prevStep.CountersignId;
|
|
|
|
|
|
+ var handlerType = stepDefine.CountersignPolicy switch
|
|
|
+ {
|
|
|
+ EDynamicPolicy.OrgUpCenterTop => EHandlerType.OrgLevel,
|
|
|
+ EDynamicPolicy.OrgUp => EHandlerType.OrgLevel,
|
|
|
+ EDynamicPolicy.OrgDownCenterTop => EHandlerType.OrgLevel,
|
|
|
+ EDynamicPolicy.OrgDown => EHandlerType.OrgLevel,
|
|
|
+ null => throw new ArgumentOutOfRangeException(),
|
|
|
+ _ => throw new ArgumentOutOfRangeException()
|
|
|
+ };
|
|
|
+
|
|
|
return CreateStepsAsync(workflow, stepDefine, prevStep, dto, flowAssignType, dto.NextHandlers,
|
|
|
countersignId,
|
|
|
EWorkflowStepStatus.WaitForAccept, prevStep.GetNextStepCountersignPosition(),
|
|
|
- false, EWorkflowTraceStatus.Normal, cancellationToken);
|
|
|
+ false, EWorkflowTraceStatus.Normal, handlerType, cancellationToken);
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
@@ -1441,7 +1473,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
: (await CreateStepsAsync(workflow, targetStepDefine, targetPrevStep, dto,
|
|
|
flowAssignInfo.FlowAssignType, dto.NextHandlers,
|
|
|
null, EWorkflowStepStatus.WaitForAccept, ECountersignPosition.None, true, traceStatus,
|
|
|
- cancellationToken)).First();
|
|
|
+ null, cancellationToken)).First();
|
|
|
|
|
|
|
|
|
//更新当前办理节点信息
|
|
@@ -1538,7 +1570,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
|
|
|
return await CreateStepsAsync(workflow, stepDefine, prevStep, dto, flowAssignInfo.FlowAssignType, handlers,
|
|
|
null, EWorkflowStepStatus.WaitForAccept, ECountersignPosition.None, true, traceStatus,
|
|
|
- cancellationToken);
|
|
|
+ null, cancellationToken);
|
|
|
}
|
|
|
|
|
|
private async Task<List<WorkflowStep>> CreateStepsAsync(
|
|
@@ -1554,7 +1586,8 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
//DateTime expiredTime,
|
|
|
bool isOrigin,
|
|
|
EWorkflowTraceStatus traceStatus,
|
|
|
- CancellationToken cancellationToken
|
|
|
+ EHandlerType? handlerType = null,
|
|
|
+ CancellationToken cancellationToken = default
|
|
|
)
|
|
|
{
|
|
|
//var countersignId = prevStep.IsStartCountersign
|
|
@@ -1568,7 +1601,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
{
|
|
|
var step = CreateStep(stepDefine, prevStep, workflow.Id, flowAssignType, new List<Kv> { handler },
|
|
|
dto.NextStepCode, dto.NextMainHandler, countersignId,
|
|
|
- stepStatus, csPosition, workflow.ExpiredTime, dto.NextStepName, isOrigin);
|
|
|
+ stepStatus, csPosition, workflow.ExpiredTime, dto.NextStepName, isOrigin, handlerType);
|
|
|
|
|
|
steps.Add(step);
|
|
|
}
|
|
@@ -1577,7 +1610,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
{
|
|
|
var step = CreateStep(stepDefine, prevStep, workflow.Id, flowAssignType, handlers,
|
|
|
dto.NextStepCode, dto.NextMainHandler, countersignId,
|
|
|
- stepStatus, csPosition, workflow.ExpiredTime, dto.NextStepName, isOrigin);
|
|
|
+ stepStatus, csPosition, workflow.ExpiredTime, dto.NextStepName, isOrigin, handlerType);
|
|
|
|
|
|
steps.Add(step);
|
|
|
}
|
|
@@ -1641,7 +1674,8 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
ECountersignPosition countersignPosition,
|
|
|
DateTime expiredTime,
|
|
|
string stepName,
|
|
|
- bool isOrigin
|
|
|
+ bool isOrigin,
|
|
|
+ EHandlerType? handlerType = null//动态节点依据动态策略判断
|
|
|
)
|
|
|
{
|
|
|
if (!handlers.Any())
|
|
@@ -1665,6 +1699,9 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
step.IsOrigin = isOrigin;
|
|
|
step.Name = stepName;
|
|
|
|
|
|
+ if (handlerType.HasValue)
|
|
|
+ step.HandlerType = handlerType.Value;
|
|
|
+
|
|
|
return step;
|
|
|
}
|
|
|
|