瀏覽代碼

startflow

Xfedge 1 年之前
父節點
當前提交
020667b61f

+ 15 - 2
src/Hotline.Application/FlowEngine/WorkflowApplication.cs

@@ -477,8 +477,21 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
         return dto;
     }
 
-    private bool DynamicShouldTerminal(WorkflowStep step) =>
-        step.NextStepCode == step.TerminalDynamicMark;
+    private bool DynamicShouldTerminal(WorkflowStep step)
+    {
+        if (step.InstanceMode is not EInstanceMode.Dynamic)
+            throw new UserFriendlyException("非动态节点");
+        switch (step.InstancePolicy)
+        {
+            case EDynamicPolicy.OrgUpCenterTop:
+            case EDynamicPolicy.OrgUp:
+            case EDynamicPolicy.OrgDownCenterTop:
+            case EDynamicPolicy.OrgDown:
+                return step.ChosenStepCode == step.TerminalDynamicMark;
+            default:
+                throw new ArgumentOutOfRangeException();
+        }
+    }
 
     /// <summary>
     /// 查询下一步所选节点对应待选项

+ 1 - 1
src/Hotline.Share/Dtos/FlowEngine/Definition/StepDefineBasic.cs

@@ -81,7 +81,7 @@ namespace Hotline.Share.Dtos.FlowEngine.Definition
         /// <summary>
         /// 到此标记终止动态实例化(多次模式才有)
         /// <remarks>
-        /// 按直属部门重复既保存orgId
+        /// 按直属部门重复既保存orgLevel:int
         /// </remarks>
         /// </summary>
         public string? TerminalDynamicMark { get; set; }

+ 6 - 0
src/Hotline/FlowEngine/Workflows/StepBasicEntity.cs

@@ -59,6 +59,12 @@ public abstract class StepBasicEntity : CreationEntity
     /// 节点期满时间
     /// </summary>
     public DateTime StepExpiredTime { get; set; }
+
+    /// <summary>
+    /// 上一节点办理时,nextStepCode下拉框中选中的值
+    /// config模式:当前节点的difinition.code, dynamic模式:x级部门办理的x:int
+    /// </summary>
+    public string? ChosenStepCode { get; set; }
     
     #region 接办
 

+ 3 - 1
src/Hotline/FlowEngine/Workflows/WorkflowDomainService.cs

@@ -105,6 +105,7 @@ namespace Hotline.FlowEngine.Workflows
                 NextSteps = nextSteps,
                 IsMain = true,
                 Status = EWorkflowStepStatus.Handling,
+                ChosenStepCode = "start",
             };
             _mapper.Map(workflow.WorkflowDefinition, startStep);
             await _workflowStepRepository.AddAsync(startStep, cancellationToken);
@@ -121,7 +122,8 @@ namespace Hotline.FlowEngine.Workflows
                 WorkflowId = workflow.Id,
                 Handlers = flowAssignInfo.GetHandlers(),
                 NextSteps = _mapper.Map<List<StepSimple>>(firstStepDefine.NextSteps),
-                Status = EWorkflowStepStatus.WaitForAccept
+                Status = EWorkflowStepStatus.WaitForAccept,
+                ChosenStepCode = dto.NextStepCode,
             };
             _mapper.Map(workflow.WorkflowDefinition, firstStep);
             await _workflowStepRepository.AddAsync(firstStep, cancellationToken);

+ 7 - 7
src/Hotline/FlowEngine/Workflows/WorkflowStep.cs

@@ -143,7 +143,7 @@ public class WorkflowStep : StepBasicEntity
     /// <summary>
     /// 到此标记终止动态实例化(多次模式才有)
     /// <remarks>
-    /// 按直属部门重复既保存orgId
+    /// 按直属部门重复既保存orgLevel:int
     /// </remarks>
     /// </summary>
     public string? TerminalDynamicMark { get; set; }
@@ -301,7 +301,7 @@ public class CountersignStep
 
 获取待办节点下一步待选节点:
   是否属于多次实例化配置(无需检查definetion,直接找到当前待办节点获取参数(需要的参数冗余至待办节点上))
-    t:检查是否到结束标识(检查当前办理节点的办理对象与结束标识是否一致)
+    t:检查是否到结束标识(检查当前办理节点的办理对象与结束标识(orglevel:int)是否一致)
       t:返回配置的下一节点(看作单次实例化,当前节点已办完)//definitionId,stepCodes,按配置走
       f:按配置的重复实例化策略结合当前操作人,生成如:{x:X级部门办理},{0:中心办理},最高级最多只能到中心,按动态策略走,动态策略枚举
   是否处于会签中 
@@ -317,14 +317,14 @@ public class CountersignStep
 start:
   check配置是否允许当前用户发起
 
-next: 
+next: (nextStepCode/x, userId[]/orgId[],dto.other)
   check该不该当前用户办(handlers,all不需要check)
-  办理
+  办理当前节点
   创建后面节点
     是否动态实例化
-      t:检查是否到结束标识
-        t:按配置创建
-        f:按动态实例化策略创建
+      t:检查是否到结束标识(参数orgId==mark?)
+        t:(参数时stepcode)按配置创建
+        f:(参数是x级部门)按动态实例化策略创建
     是否处于会签中 
       t: 是否返回上一级汇总 (isCSEnd)
         t:  1.update上一级的会签完成情况[] 2.如果会签全完成,创建新的待办汇总节点?更新发起节点状态?thk