Quellcode durchsuchen

define nextstepsdto

Xfedge vor 1 Jahr
Ursprung
Commit
500ef5d3b0

+ 4 - 4
src/Hotline.Api/Controllers/WorkflowController.cs

@@ -263,7 +263,7 @@ public class WorkflowController : BaseController
 
         return new DefinedStepDto
         {
-            Id = workflow.DefinitionId,
+            DefinitionId = workflow.DefinitionId,
             Steps = _mapper.Map<IReadOnlyList<StepBasicDto>>(nextStepDefines),//nextStepDefines.Select(d => new KeyValuePair<string, string>(d.Code, d.Name)).ToList(),
             ExpiredTime = workflow.ExpiredTime,
             Components = current.StepBox.Components,
@@ -323,7 +323,7 @@ public class WorkflowController : BaseController
         var nextStepDefines = workflow.WorkflowDefinition.FindStepDefines(stepCodes);
         return new DefinedStepDto
         {
-            Id = workflow.DefinitionId,
+            DefinitionId = workflow.DefinitionId,
             Steps = _mapper.Map<IReadOnlyList<StepBasicDto>>(nextStepDefines)//nextStepDefines.Select(d => new KeyValuePair<string, string>(d.Code, d.Name)).ToList()
         };
     }
@@ -353,7 +353,7 @@ public class WorkflowController : BaseController
         var nextStepDefines = workflow.WorkflowDefinition.FindStepDefines(steps.Select(d => d.Code));
         return new DefinedStepDto
         {
-            Id = workflow.DefinitionId,
+            DefinitionId = workflow.DefinitionId,
             Steps = _mapper.Map<IReadOnlyList<StepBasicDto>>(nextStepDefines)//nextStepDefines.Select(d => new KeyValuePair<string, string>(d.Code, d.Name)).ToList()
         };
     }
@@ -383,7 +383,7 @@ public class WorkflowController : BaseController
         var nextStepDefines = workflow.WorkflowDefinition.FindStepDefines(steps.Select(d => d.Code));
         return new DefinedStepDto
         {
-            Id = workflow.DefinitionId,
+            DefinitionId = workflow.DefinitionId,
             Steps = _mapper.Map<IReadOnlyList<StepBasicDto>>(nextStepDefines)//nextStepDefines.Select(d => new KeyValuePair<string, string>(d.Code, d.Name)).ToList()
         };
     }

+ 5 - 0
src/Hotline.Application/FlowEngine/IWorkflowApplication.cs

@@ -40,5 +40,10 @@ namespace Hotline.Application.FlowEngine
         /// 查询节点配置可选参数
         /// </summary>
         Task<IReadOnlyList<Kv>> GetNextStepOptionsAsync(StepDefineBasic stepDefine, CancellationToken cancellationToken);
+     
+        /// <summary>
+        /// 查询开始流程的下一步待选项(含选项内的子选项)
+        /// </summary>
+        Task<NextStepsDto> GetStartWorkflowNextStepOptionsAsync(string moduleCode, CancellationToken cancellationToken);
     }
 }

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

@@ -212,14 +212,10 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
         if (startStep == null)
             throw new UserFriendlyException("未正确配置发起人节点");
 
-        if (startStep.InstanceMode is EInstanceMode.Multiple)
+        if (startStep.InstanceMode is EInstanceMode.Dynamic)
         {
-            startStep.Name = $"{startStep.InstancePolicy?.GetDescription()}";
-            return new DefinedStepDto
-            {
-                Id = definition.Id,
-                Steps = new List<StepDefineBasic> { startStep }
-            };
+            //todo 依据当前操作人生成下一步节点
+            //return
         }
 
         var firstStepDefines = definition.FindStepDefines(startStep.NextSteps.Select(d => d.Code));
@@ -228,7 +224,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
 
         return new DefinedStepDto
         {
-            Id = definition.Id,
+            DefinitionId = definition.Id,
             Steps = firstStepDefines
             // Components = firstStepDefine.Components
         };
@@ -324,6 +320,40 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
         return dto;
     }
 
+    /// <summary>
+    /// 查询流程开始节点的下一节点配置
+    /// </summary>
+    public async Task<NextStepsDto> GetStartWorkflowNextStepOptionsAsync(string moduleCode, CancellationToken cancellationToken)
+    {
+        var wfModule = await GetWorkflowModuleAsync(moduleCode, cancellationToken);
+        var definition = wfModule.Definition;
+        if (definition == null)
+            throw new UserFriendlyException("无效模板编码");
+        if (definition.Status is not EDefinitionStatus.Enable)
+            throw new UserFriendlyException("该模板不可用");
+
+        var startStep = definition.Steps.FirstOrDefault(d => d.StepType == EStepType.Start);
+        if (startStep == null)
+            throw new UserFriendlyException("未正确配置发起人节点");
+
+        if (startStep.InstanceMode is EInstanceMode.Dynamic)
+        {
+            //todo 依据当前操作人生成下一步节点
+            //return
+        }
+
+        var firstStepDefines = definition.FindStepDefines(startStep.NextSteps.Select(d => d.Code));
+        if (!firstStepDefines.Any())
+            throw new UserFriendlyException("未正确配置首个办理节点");
+
+        return new DefinedStepDto
+        {
+            DefinitionId = definition.Id,
+            Steps = firstStepDefines
+            // Components = firstStepDefine.Components
+        };
+    }
+
     /// <summary>
     /// 查询指派办理人的处理方式及实际办理人
     /// </summary>

+ 1 - 1
src/Hotline.Application/FlowEngine/WorkflowApplication1.cs

@@ -203,7 +203,7 @@ public class WorkflowApplication1 : IWorkflowApplication, IScopeDependency
 
         return new DefinedStepDto
         {
-            Id = definition.Id,
+            DefinitionId = definition.Id,
             Steps = _mapper.Map<IReadOnlyList<StepBasicDto>>(secondStepDefines),//secondStepDefines.Select(d => new KeyValuePair<string, string>(d.Code, d.Name)).ToList()
             Components = firstStepDefine.Components
         };

+ 16 - 2
src/Hotline.Share/Dtos/FlowEngine/DefinedStepDto.cs

@@ -15,10 +15,9 @@ namespace Hotline.Share.Dtos.FlowEngine
     /// </summary>
     public class DefinedStepDto
     {
-        public string Id { get; set; }
+        public string DefinitionId { get; set; }
 
         public IReadOnlyList<StepDefineBasic> Steps { get; set; }
-
         public DateTime? ExpiredTime { get; set; }
 
         // public IReadOnlyList<string> Components { get; set; }
@@ -29,4 +28,19 @@ namespace Hotline.Share.Dtos.FlowEngine
         // public IEnumerable<KeyValuePair<int, string>> TimeTypeOptions =>
         //     EnumExts.GetDescriptions<ETimeType>();
     }
+
+    public class NextStepOption
+    {
+        public string Key { get; set; }
+
+        public string Value { get; set; }
+
+        public IReadOnlyList<Kv> Items { get; set; }
+    }
+
+    public class NextStepsDto
+    {
+        public IReadOnlyList<NextStepOption> StepOptions { get; set; }
+        public DateTime? ExpiredTime { get; set; }
+    }
 }