瀏覽代碼

梳理workflow instance

xfe 1 年之前
父節點
當前提交
a4f4beb3a2

+ 8 - 16
src/Hotline.Application/FlowEngine/WorkflowApplication.cs

@@ -24,6 +24,7 @@ using XF.Domain.Dependency;
 using XF.Domain.Entities;
 using XF.Domain.Exceptions;
 using XF.Domain.Repository;
+using XF.Utility.EnumExtensions;
 
 namespace Hotline.Application.FlowEngine;
 
@@ -210,24 +211,15 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
         var startStep = definition.Steps.FirstOrDefault(d => d.StepType == EStepType.Start);
         if (startStep == null)
             throw new UserFriendlyException("未正确配置发起人节点");
-        
-        if(startStep.InstanceMode is EInstanceMode.Multiple)
+
+        if (startStep.InstanceMode is EInstanceMode.Multiple)
         {
-            switch (startStep.RepeatPolicy)
+            startStep.Name = $"{startStep.InstancePolicy?.GetDescription()}";
+            return new DefinedStepDto
             {
-                case ERepeatPolicy.OrgUpCenterTop:
-                    break;
-                case ERepeatPolicy.OrgUp:
-                    break;
-                case ERepeatPolicy.OrgDownCenterTop:
-                    break;
-                case ERepeatPolicy.OrgDown:
-                    break;
-                case null:
-                    break;
-                default:
-                    throw new ArgumentOutOfRangeException();
-            }
+                Id = definition.Id,
+                Steps = new List<StepDefineBasic> { startStep }
+            };
         }
 
         var firstStepDefines = definition.FindStepDefines(startStep.NextSteps.Select(d => d.Code));

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

@@ -62,11 +62,11 @@ namespace Hotline.Share.Dtos.FlowEngine.Definition
         /// <summary>
         /// 会签策略
         /// </summary>
-        public ECountersignPolicy? CountersignPolicy { get; set; }
+        public EDynamicPolicy? CountersignPolicy { get; set; }
 
         #endregion
         
-        #region 实例化方式
+        #region 依据配置生成节点的方式
 
         /// <summary>
         /// 实例化模式
@@ -74,17 +74,17 @@ namespace Hotline.Share.Dtos.FlowEngine.Definition
         public EInstanceMode InstanceMode { get; set; }
 
         /// <summary>
-        /// 重复实例化策略(多次模式才有)
+        /// 动态实例化策略(多次模式才有)
         /// </summary>
-        public ERepeatPolicy? RepeatPolicy { get; set; }
+        public EDynamicPolicy? InstancePolicy { get; set; }
 
         /// <summary>
-        /// 到此标记终止重复实例化(多次模式才有)
+        /// 到此标记终止动态实例化(多次模式才有)
         /// <remarks>
         /// 按直属部门重复既保存orgId
         /// </remarks>
         /// </summary>
-        public string? TerminalMark { get; set; }
+        public string? TerminalDynamicMark { get; set; }
 
         #endregion
 

+ 2 - 2
src/Hotline.Share/Enums/FlowEngine/ECountersignPolicy.cs → src/Hotline.Share/Enums/FlowEngine/EDynamicPolicy.cs

@@ -3,9 +3,9 @@
 namespace Hotline.Share.Enums.FlowEngine;
 
 /// <summary>
-/// 会签策略
+/// 动态实例化策略
 /// </summary>
-public enum ECountersignPolicy
+public enum EDynamicPolicy
 {
     /// <summary>
     /// 直属上级部门(中心作为顶级部门)

+ 4 - 4
src/Hotline.Share/Enums/FlowEngine/EInstanceMode.cs

@@ -7,9 +7,9 @@ namespace Hotline.Share.Enums.FlowEngine;
 /// </summary>
 public enum EInstanceMode
 {
-    [Description("单次")]
-    Single = 0,
+    [Description("依据配置")]
+    Config = 0,
 
-    [Description("多次")]
-    Multiple = 1
+    [Description("依据操作人动态生成")]
+    Dynamic = 1
 }

+ 0 - 33
src/Hotline.Share/Enums/FlowEngine/ERepeatPolicy.cs

@@ -1,33 +0,0 @@
-using System.ComponentModel;
-
-namespace Hotline.Share.Enums.FlowEngine;
-
-/// <summary>
-/// 实例化循环策略
-/// </summary>
-public enum ERepeatPolicy
-{
-    /// <summary>
-    /// 直属上级部门(中心作为顶级部门)
-    /// </summary>
-    [Description("直属上级(中心作为顶级部门)")]
-    OrgUpCenterTop = 0,
-
-    /// <summary>
-    /// 直属上级(中心作为一级部门)
-    /// </summary>
-    [Description("直属上级(中心作为一级部门)")]
-    OrgUp = 1,
-
-    /// <summary>
-    /// 直属下级部门(中心作为顶级部门)
-    /// </summary>
-    [Description("直属下级(中心作为顶级部门)")]
-    OrgDownCenterTop = 2,
-
-    /// <summary>
-    /// 直属下级(中心作为一级部门)
-    /// </summary>
-    [Description("直属下级(中心作为一级部门)")]
-    OrgDown = 3,
-}

+ 22 - 3
src/Hotline/FlowEngine/Workflows/WorkflowStep.cs

@@ -211,13 +211,32 @@ public class CountersignStep
 }
 
 /*
+获取开始节点下一步待选节点:
+  是否属于多次实例化配置(dynamic动态实例化配置:结合办理人动态生成待办节点)
+    t:无需检查是否到结束标识,所以按配置的重复实例化策略结合当前操作人生成待办节点,如:生成x级部门办理,下一接口再选具体部门
+    f:开始节点配置的下一节点集合
+
+获取开始节点所选下一步节点的具体参数:
+  所选节点是否为开始节点
+    t:是否属于多次实例化配置
+      t:所选x级部门返回对应办理对象集合(具体部门)
+      f:throw error
+    f:按模板配置返回办理对象集合
+
 获取待办节点下一步待选节点:
+  是否属于多次实例化配置(无需检查definetion,直接找到当前待办节点获取参数(需要的参数冗余至待办节点上))
+    t:检查是否到结束标识(检查当前办理节点的办理对象与结束标识是否一致)
+      t:返回配置的下一节点(看作单次实例化,当前节点已办完)//definitionId,stepCodes,按配置走
+      f:按配置的重复实例化策略结合当前操作人,生成如:{x:X级部门办理},{0:中心办理},最高级最多只能到中心,按动态策略走,动态策略枚举
   是否处于会签中 
-    t:1.按会签策略的下一级 2.上一级(isCSEnd会签汇总节点标记)
-    f:按照definition
+    t:按会签策略的下一级 + 上一级(isCSEnd会签汇总节点标记),并对上一级选项打上标记,如:{x:X级部门办理},{0:中心办理},按动态策略走,动态策略枚举
+    f:按照definition(按配置走)
+  返回当前节点的配置下一步
 
 获取下一步的具体参数:
-  会签中就没有下一步的stepCode了
+  检查模式
+    按动态策略:依据当前操作人、动态类型枚举 查询对应待选部门
+    按配置策略:原有实现方案
 
 start:
   check配置是否允许当前用户发起