xf před 2 roky
rodič
revize
1984466196

+ 45 - 0
src/Hotline.Api/Controllers/WorkflowController.cs

@@ -261,6 +261,51 @@ public class WorkflowController : BaseController
         return items;
     }
 
+    /// <summary>
+    /// 跳转至任意节点
+    /// </summary>
+    /// <param name="dto"></param>
+    /// <returns></returns>
+    [HttpPost("jump")]
+    public async Task Jump([FromBody] RecallDto dto)
+    {
+        var workflow = await _workflowDomainService.GetWorkflowAsync(dto.WorkflowId, HttpContext.RequestAborted);
+        await _workflowDomainService.JumpAsync(workflow, dto, HttpContext.RequestAborted);
+    }
+
+    /// <summary>
+    /// 终止流程
+    /// </summary>
+    /// <param name="workflowId"></param>
+    /// <returns></returns>
+    [HttpPut("terminate/{workflowId}")]
+    public async Task Terminate(string workflowId)
+    {
+        await _workflowDomainService.TerminateAsync(workflowId, HttpContext.RequestAborted);
+    }
+
+    /// <summary>
+    /// 获取跳转参数
+    /// </summary>
+    /// <param name="workflowId"></param>
+    /// <returns></returns>
+    [HttpGet("jump")]
+    public async Task<IReadOnlyList<StepDefineDto>> GetJumpTargets(string workflowId)
+    {
+        var workflow = await _workflowDomainService.GetWorkflowAsync(workflowId, HttpContext.RequestAborted);
+        return _mapper.Map<IReadOnlyList<StepDefineDto>>(workflow.Definition.Steps);
+    }
 
+    /// <summary>
+    /// 获取撤回参数
+    /// </summary>
+    /// <param name="workflowId"></param>
+    /// <returns></returns>
+    [HttpGet("recall")]
+    public async Task<IReadOnlyList<StepDefineDto>> GetRecallTargets(string workflowId)
+    {
+        var workflow = await _workflowDomainService.GetWorkflowAsync(workflowId, HttpContext.RequestAborted);
+        return _mapper.Map<IReadOnlyList<StepDefineDto>>(workflow.StepBoxes);
+    }
 
 }

+ 2 - 0
src/Hotline/FlowEngine/Workflows/WorkflowDomainService.cs

@@ -412,6 +412,8 @@ namespace Hotline.FlowEngine.Workflows
                 throw UserFriendlyException.SameMessage("无效的流程编号");
             workflow.Terminate();
             await _workflowRepository.UpdateAsync(workflow, cancellationToken);
+
+            //todo publish
         }
 
         /// <summary>