xf 2 år sedan
förälder
incheckning
34002bcab9

+ 2 - 2
src/Hotline.Api/Controllers/KnowledgeController.cs

@@ -540,7 +540,7 @@ namespace Hotline.Api.Controllers
         /// <returns></returns>
         [Permission(EPermission.AddKnowledge)]
         [HttpGet("add-flow-start")]
-        public async Task<DefineWithSelectionStepDto> GetAddFlowStartOptionsAsync()
+        public async Task<DefineWithSelectionStepsDto> GetAddFlowStartOptionsAsync()
         {
             return await _workflowApplication.GetStartOptionsAsync(WorkflowModuleConsts.KnowledgeAdd, HttpContext.RequestAborted);
         }
@@ -551,7 +551,7 @@ namespace Hotline.Api.Controllers
         /// <returns></returns>
         [Permission(EPermission.KnowledgeDelete)]
         [HttpGet("remove-flow-start")]
-        public async Task<DefineWithSelectionStepDto> GetRemoveFlowStartOptionsAsync()
+        public async Task<DefineWithSelectionStepsDto> GetRemoveFlowStartOptionsAsync()
         {
             return await _workflowApplication.GetStartOptionsAsync(WorkflowModuleConsts.KnowledgeDelete, HttpContext.RequestAborted);
         }

+ 1 - 1
src/Hotline.Api/Controllers/OrderController.cs

@@ -232,7 +232,7 @@ public class OrderController : BaseController
     /// </summary>
     /// <returns></returns>
     [HttpGet("flow-start")]
-    public async Task<DefineWithSelectionStepDto> GetFlowStartOptionsAsync()
+    public async Task<DefineWithSelectionStepsDto> GetFlowStartOptionsAsync()
     {
         return await _workflowApplication.GetStartOptionsAsync(WorkflowModuleConsts.OrderManage, HttpContext.RequestAborted);
     }

+ 1 - 1
src/Hotline.Api/Controllers/PbxController.cs

@@ -225,7 +225,7 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <returns></returns>
         [HttpGet("flow-start")]
-        public async Task<DefineWithSelectionStepDto> GetFlowStartOptionsAsync()
+        public async Task<DefineWithSelectionStepsDto> GetFlowStartOptionsAsync()
         {
             return await _workflowApplication.GetStartOptionsAsync(WorkflowModuleConsts.TelRestApply,
                 HttpContext.RequestAborted);

+ 20 - 9
src/Hotline.Api/Controllers/WorkflowController.cs

@@ -261,12 +261,12 @@ public class WorkflowController : BaseController
     /// 查询当前流程下一节点配置
     /// </summary>
     [HttpGet("{workflowId}/nextsteps")]
-    public async Task<DefineWithSelectionStepDto> GetNextStepDefine(string workflowId)
+    public async Task<DefineWithSelectionStepsDto> GetNextStepDefine(string workflowId)
     {
         var workflow = await _workflowDomainService.GetWorkflowAsync(workflowId, true, true,
             cancellationToken: HttpContext.RequestAborted);
         var nextStepDefines = _workflowDomainService.GetNextStepDefines(workflow);
-        return new DefineWithSelectionStepDto
+        return new DefineWithSelectionStepsDto
         {
             Id = workflow.DefinitionId,
             Steps = nextStepDefines.Select(d => new KeyValuePair<string, string>(d.Code, d.Name)).ToList()
@@ -314,17 +314,23 @@ public class WorkflowController : BaseController
     }
 
     /// <summary>
-    /// 获取撤回参数
+    /// 获取撤回可选节点
     /// </summary>
     /// <param name="workflowId"></param>
     /// <returns></returns>
     [Permission(EPermission.FlowJump)]
     [HttpGet("{workflowId}/recall")]
-    public async Task<IReadOnlyList<StepDefineDto>> GetRecallOptions(string workflowId)
+    public async Task<DefineWithSelectionStepsDto> GetRecallOptions(string workflowId)
     {
         var workflow = await _workflowDomainService.GetWorkflowAsync(workflowId, true, true, cancellationToken: HttpContext.RequestAborted);
-        return _mapper.Map<IReadOnlyList<StepDefineDto>>(
-            workflow.StepBoxes.Where(d => d.StepType != EStepType.Start && d.StepType != EStepType.End));
+        var stepCodes = workflow.StepBoxes.Where(d => d.StepType != EStepType.Start && d.StepType != EStepType.End)
+            .Select(d => d.Code).ToList();
+        var nextStepDefines = workflow.Definition.FindSteps(stepCodes);
+        return new DefineWithSelectionStepsDto
+        {
+            Id = workflow.DefinitionId,
+            Steps = nextStepDefines.Select(d => new KeyValuePair<string, string>(d.Code, d.Name)).ToList()
+        };
     }
 
     /// <summary>
@@ -344,11 +350,16 @@ public class WorkflowController : BaseController
     /// <param name="workflowId"></param>
     /// <returns></returns>
     [HttpGet("{workflowId}/jump")]
-    public async Task<IReadOnlyList<StepDefineDto>> GetJumpOptions(string workflowId)
+    public async Task<DefineWithSelectionStepsDto> GetJumpOptions(string workflowId)
     {
         var workflow = await _workflowDomainService.GetWorkflowAsync(workflowId, true, true, cancellationToken: HttpContext.RequestAborted);
-        var steps = workflow.Definition.Steps.Where(d => d.StepType != EStepType.Start && d.StepType != EStepType.End);
-        return _mapper.Map<IReadOnlyList<StepDefineDto>>(steps);
+        var steps = workflow.Definition.Steps.Where(d => d.StepType != EStepType.Start && d.StepType != EStepType.End).ToList();
+        var nextStepDefines = workflow.Definition.FindSteps(steps.Select(d => d.Code));
+        return new DefineWithSelectionStepsDto
+        {
+            Id = workflow.DefinitionId,
+            Steps = nextStepDefines.Select(d => new KeyValuePair<string, string>(d.Code, d.Name)).ToList()
+        };
     }
 
     /// <summary>

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

@@ -32,7 +32,7 @@ namespace Hotline.Application.FlowEngine
         /// <summary>
         /// 查询流程开始节点的下一节点配置
         /// </summary>
-        Task<DefineWithSelectionStepDto> GetStartOptionsAsync(string moduleCode, CancellationToken cancellationToken);
+        Task<DefineWithSelectionStepsDto> GetStartOptionsAsync(string moduleCode, CancellationToken cancellationToken);
 
         /// <summary>
         /// 查询节点配置可选参数

+ 3 - 3
src/Hotline.Application/FlowEngine/WorkflowApplication.cs

@@ -132,7 +132,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
         await _workflowDomainService.JumpAsync(workflow, dto, targetStepDefine, isStartCountersign, flowAssignMode, cancellationToken);
     }
 
-    public async Task<DefineWithSelectionStepDto> GetStartOptionsAsync(string moduleCode, CancellationToken cancellationToken)
+    public async Task<DefineWithSelectionStepsDto> GetStartOptionsAsync(string moduleCode, CancellationToken cancellationToken)
     {
         var definition =
             await _definitionDomainService.GetLastVersionByModuleCodeAsync(moduleCode, cancellationToken);
@@ -144,9 +144,9 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
         var startStep = definition.Steps.FirstOrDefault(d => d.StepType == EStepType.Start);
         if (startStep == null)
             throw new UserFriendlyException("未正确配置开始节点");
-        var nextStepDefines = definition.FindSteps(startStep.NextSteps);
+        var nextStepDefines = definition.FindSteps(startStep.NextSteps.Select(d=>d.Code));
 
-        return new DefineWithSelectionStepDto
+        return new DefineWithSelectionStepsDto
         {
             Id = definition.Id,
             Steps = nextStepDefines.Select(d => new KeyValuePair<string, string>(d.Code, d.Name)).ToList()

+ 2 - 2
src/Hotline.Share/Dtos/FlowEngine/DefineWithSelectionStepDto.cs → src/Hotline.Share/Dtos/FlowEngine/DefineWithSelectionStepsDto.cs

@@ -7,9 +7,9 @@ using System.Threading.Tasks;
 namespace Hotline.Share.Dtos.FlowEngine
 {
     /// <summary>
-    /// 只含选step的define
+    /// 只含选step的define
     /// </summary>
-    public class DefineWithSelectionStepDto
+    public class DefineWithSelectionStepsDto
     {
         public string Id { get; set; }
 

+ 2 - 5
src/Hotline/FlowEngine/Definitions/Definition.cs

@@ -51,11 +51,8 @@ public class Definition : CreationEntity
     public StepDefine FindStartStep() =>
         Steps.First(d => d.StepType is EStepType.Start);
 
-    public List<StepDefine> FindSteps(List<NextStepDefine> steps) =>
-        Steps.Where(d => steps.Select(x => x.Code).Contains(d.Code)).ToList();
-
-    public List<StepDefine> FindSteps(List<NextStep> steps) =>
-        Steps.Where(d => steps.Select(x => x.Code).Contains(d.Code)).ToList();
+    public List<StepDefine> FindSteps(IEnumerable<string> stepCodes) =>
+        Steps.Where(d => stepCodes.Contains(d.Code)).ToList();
 
     public StepDefine? FindStep(string code)
     {

+ 0 - 14
src/Hotline/FlowEngine/Definitions/DefinitionDomainService.cs

@@ -118,20 +118,6 @@ public class DefinitionDomainService : IDefinitionDomainService, IScopeDependenc
             .Take(1)
             .FirstAsync();
     }
-    
-    /// <summary>
-    /// 未开启的流程,查找第2个节点的模板配置信息,用作开始流程的时候传参
-    /// </summary>
-    /// <param name="definitionCode"></param>
-    /// <param name="cancellationToken"></param>
-    /// <returns></returns>
-    public async Task<IReadOnlyList<StepDefine>> GetSecondStepsAsync(string definitionCode, CancellationToken cancellationToken)
-    {
-        var definition = await GetLastVersionAsync(definitionCode, cancellationToken);
-        if (definition == null)
-            throw new UserFriendlyException($"无效模板编码, code:{definitionCode}", "无效模板编码");
-        return definition.FindSteps(definition.FindStartStep().NextSteps);
-    }
 
     #region private
     private void ValidateDefinition(Definition? definition)

+ 0 - 8
src/Hotline/FlowEngine/Definitions/IDefinitionDomainService.cs

@@ -44,13 +44,5 @@ namespace Hotline.FlowEngine.Definitions
         /// 禁用指定业务模块下所有模板
         /// </summary>
         Task EnableAsync(string moduleCode, CancellationToken cancellationToken);
-
-        /// <summary>
-        /// 未开启的流程,查找start节点配置的nextSteps信息,用作开启流程的传参
-        /// </summary>
-        /// <param name="definitionCode"></param>
-        /// <param name="cancellationToken"></param>
-        /// <returns></returns>
-        Task<IReadOnlyList<StepDefine>> GetSecondStepsAsync(string definitionCode, CancellationToken cancellationToken);
     }
 }

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

@@ -595,7 +595,7 @@ namespace Hotline.FlowEngine.Workflows
         public IReadOnlyList<StepDefine> GetNextStepDefines(Workflow workflow)
         {
             var (currentStepBox, _) = GetUnCompleteStep(workflow.StepBoxes, _sessionContext.RequiredOrgCode, _sessionContext.RequiredUserId);
-            return workflow.Definition.FindSteps(currentStepBox.NextSteps);
+            return workflow.Definition.FindSteps(currentStepBox.NextSteps.Select(d=>d.Code));
         }