xf 1 рік тому
батько
коміт
3db9b00f17

+ 22 - 7
src/Hotline.Application/FlowEngine/WorkflowApplication.cs

@@ -107,7 +107,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
         //如果发起会签需检查是否支持发起会签
         var startStepDefine = definition.FindStartStepDefine();
 
-        var firstStepDefine = startStepDefine.InstanceMode is EInstanceMode.Dynamic
+        var firstStepDefine = startStepDefine.InstanceMode is EInstanceMode.Dynamic && !DynamicShouldTerminal(startStepDefine, _sessionContext.OrgLevel)
             ? startStepDefine
             : definition.FindStepDefine(dto.NextStepCode);
         if (firstStepDefine is null)
@@ -131,7 +131,6 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
                 throw new UserFriendlyException("下一节点不允许发起会签");
         }
 
-        //todo
         var workflow = await _workflowDomainService.CreateWorkflowAsync(wfModule, dto.Title,
             _sessionContext.RequiredUserId, _sessionContext.RequiredOrgId, externalId, expiredTime?.RuleStr,
             expiredTime?.EndTime, cancellationToken);
@@ -408,7 +407,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
         if (definition.Status is not EDefinitionStatus.Enable)
             throw new UserFriendlyException("该模板不可用");
 
-        var startStep = definition.FindStartStepDefine();
+        var startStepDefine = definition.FindStartStepDefine();
 
         //var dto = new NextStepsDto
         //{
@@ -417,19 +416,19 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
         //    DynamicPolicy = startStep.InstancePolicy
         //};
 
-        if (startStep.InstanceMode is EInstanceMode.Dynamic)
+        if (startStepDefine.InstanceMode is EInstanceMode.Dynamic && !DynamicShouldTerminal(startStepDefine, _sessionContext.OrgLevel))
         {
             //var nextStepOption = CreateDynamicStep(startStep.InstancePolicy);
             //dto.Steps = new List<NextStepOption> { nextStepOption };
             //return dto;
-            var nextStepOption = await GetDynamicStepAsync(startStep.InstancePolicy.Value, cancellationToken);
+            var nextStepOption = await GetDynamicStepAsync(startStepDefine.InstancePolicy.Value, cancellationToken);
             return new NextStepsDto
             {
                 Steps = new List<NextStepOption> { nextStepOption }
             };
         }
 
-        var firstStepDefines = definition.FindStepDefines(startStep.NextSteps.Select(d => d.Code));
+        var firstStepDefines = definition.FindStepDefines(startStepDefine.NextSteps.Select(d => d.Code));
         if (!firstStepDefines.Any())
             throw new UserFriendlyException("未正确配置首个办理节点");
 
@@ -438,7 +437,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
         //        .ToList();
         return new NextStepsDto
         {
-            Steps = await GetConfigStepsAsync(startStep.StepType, startStep.BusinessType, firstStepDefines, cancellationToken)
+            Steps = await GetConfigStepsAsync(startStepDefine.StepType, startStepDefine.BusinessType, firstStepDefines, cancellationToken)
         };
         //dto.Steps = steps;
         //return dto;
@@ -742,6 +741,22 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
         }
     }
 
+    private bool DynamicShouldTerminal(StepDefine currentStepDefine, int currentOrgLevel)
+    {
+        if (currentStepDefine.InstanceMode is not EInstanceMode.Dynamic)
+            throw new UserFriendlyException("非动态节点");
+        switch (currentStepDefine.InstancePolicy)
+        {
+            case EDynamicPolicy.OrgUpCenterTop:
+            case EDynamicPolicy.OrgUp:
+            case EDynamicPolicy.OrgDownCenterTop:
+            case EDynamicPolicy.OrgDown:
+                return currentStepDefine.TerminalDynamicMark == currentOrgLevel.ToString();
+            default:
+                throw new ArgumentOutOfRangeException();
+        }
+    }
+
     /// <summary>
     /// 查询下一步所选节点对应待选项
     /// </summary>

+ 1 - 1
src/Hotline.Share/Hotline.Share.csproj

@@ -7,7 +7,7 @@
     <GenerateDocumentationFile>True</GenerateDocumentationFile>
     <NoWarn>$(NoWarn);1591;8618;</NoWarn>
     <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
-    <Version>1.0.28</Version>
+    <Version>1.0.29</Version>
   </PropertyGroup>
 
   <ItemGroup>