|
@@ -490,20 +490,25 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
{
|
|
|
CheckWhetherRunnable(workflow.Status);
|
|
|
|
|
|
- var (currentStepBox, currentStep) = GetUnCompleteStep(workflow.StepBoxes, _sessionContext.RequiredOrgCode, _sessionContext.RequiredUserId);
|
|
|
- if (currentStepBox.StepType is EStepType.Start)
|
|
|
- throw UserFriendlyException.SameMessage("当前流程已退回到开始节点");
|
|
|
- if (currentStepBox.StepType is EStepType.End)
|
|
|
- throw UserFriendlyException.SameMessage("当前流程已流转到结束节点");
|
|
|
+ //var (currentStepBox, currentStep) = GetUnCompleteStep(workflow.StepBoxes, _sessionContext.RequiredOrgCode, _sessionContext.RequiredUserId);
|
|
|
+ //if (currentStepBox.StepType is EStepType.Start)
|
|
|
+ // throw UserFriendlyException.SameMessage("当前流程已退回到开始节点");
|
|
|
+ //if (currentStepBox.StepType is EStepType.End)
|
|
|
+ // throw UserFriendlyException.SameMessage("当前流程已流转到结束节点");
|
|
|
+
|
|
|
|
|
|
var targetStepBox = workflow.StepBoxes.FirstOrDefault(d => d.Code == dto.NextStepCode);
|
|
|
if (targetStepBox == null)
|
|
|
{
|
|
|
//向后跳转
|
|
|
- //var nextStepBoxDefine = GetStepBoxDefine(workflow.Definition, dto.NextStepCode);
|
|
|
- //var isStartCountersign = nextStepBoxDefine.IsStartCountersign(dto.NextHandlers.Count);
|
|
|
+
|
|
|
+ //此场景并非按配置征程流转,取最靠后的节点做为targetStep的prevStep
|
|
|
+ var lastStepBox = workflow.StepBoxes.MaxBy(d => d.CreationTime);
|
|
|
+ if (lastStepBox is null || lastStepBox.StepType is EStepType.End)
|
|
|
+ throw new UserFriendlyException($"流程流转数据异常,未结束流程出现endStep, flowId: {workflow.Id}", "流程流转数据异常");
|
|
|
+
|
|
|
targetStepBox = await CreateStepAsync(isStartCountersign, workflow, targetStepDefine, dto,
|
|
|
- EWorkflowStepStatus.Assigned, currentStepBox, currentStep, cancellationToken);
|
|
|
+ EWorkflowStepStatus.Assigned, lastStepBox, lastStepBox.Steps.First(), cancellationToken);
|
|
|
|
|
|
await ResetWorkflowCurrentStepInfo(workflow, dto, targetStepBox, isStartCountersign, cancellationToken);
|
|
|
|
|
@@ -928,12 +933,14 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
/// 创建节点(不含开始、结束节点)
|
|
|
/// </summary>
|
|
|
private async Task<WorkflowStep> CreateStepAsync(
|
|
|
- bool isPrevStartCountersign,
|
|
|
- Workflow workflow, StepDefine stepBoxDefine,
|
|
|
- BasicWorkflowDto dto, EWorkflowStepStatus status,
|
|
|
- WorkflowStep prevStepBox,
|
|
|
- WorkflowStep prevStep,
|
|
|
- CancellationToken cancellationToken = default)
|
|
|
+ bool isPrevStartCountersign,
|
|
|
+ Workflow workflow,
|
|
|
+ StepDefine stepBoxDefine,
|
|
|
+ BasicWorkflowDto dto,
|
|
|
+ EWorkflowStepStatus status,
|
|
|
+ WorkflowStep prevStepBox,
|
|
|
+ WorkflowStep prevStep,
|
|
|
+ CancellationToken cancellationToken = default)
|
|
|
{
|
|
|
if (stepBoxDefine.StepType is EStepType.Start or EStepType.End)
|
|
|
throw new UserFriendlyException("该方法不支持创建开始或结束节点");
|