xf 1 жил өмнө
parent
commit
6b278494fd

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

@@ -393,6 +393,15 @@ public class WorkflowController : BaseController
         await _workflowDomainService.CancelAsync(dto, HttpContext.RequestAborted);
     }
 
+    /// <summary>
+    /// 否决
+    /// </summary>
+    [HttpPost("reject")]
+    public async Task Reject([FromBody] RejectDto dto)
+    {
+        await _workflowApplication.RejectAsync(dto, HttpContext.RequestAborted);
+    }
+
     /// <summary>
     /// 补充
     /// </summary>

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

@@ -68,7 +68,12 @@ namespace Hotline.Application.FlowEngine
         /// 查询重办可选节点
         /// </summary>
         Task<NextStepsDto> GetRedoStepsAsync(string workflowId, CancellationToken cancellationToken);
-        
+
+        /// <summary>
+        /// 否决
+        /// </summary>
+        Task RejectAsync(RejectDto dto, CancellationToken cancellationToken);
+
         /// <summary>
         /// 查询下一步所选节点对应待选项
         /// </summary>

+ 13 - 1
src/Hotline.Application/FlowEngine/WorkflowApplication.cs

@@ -422,7 +422,8 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
 
         var dto = new NextStepsDto
         {
-            CanReject = currentStep.CanReject
+            CanReject = currentStep.CanReject,
+            ExpiredTime = workflow.ExpiredTime,
         };
 
         if (currentStep.InstanceMode is EInstanceMode.Dynamic && !DynamicShouldTerminal(currentStep))
@@ -521,6 +522,17 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
         };
     }
 
+    /// <summary>
+    /// 否决
+    /// </summary>
+    public async Task RejectAsync(RejectDto dto, CancellationToken cancellationToken)
+    {
+        var workflow = await _workflowDomainService.GetWorkflowAsync(dto.WorkflowId, true, true,
+                cancellationToken: cancellationToken);
+        var basicDto = _mapper.Map<BasicWorkflowDto>(dto);
+        await _workflowDomainService.RejectAsync(workflow, basicDto, cancellationToken);
+    }
+
     private async Task<List<NextStepOption>> CreateConfigStepsAsync(List<StepDefine> stepDefines, CancellationToken cancellationToken)
     {
         var stepOptions = new List<NextStepOption>();

+ 1 - 6
src/Hotline.Share/Dtos/FlowEngine/BasicWorkflowDto.cs

@@ -51,9 +51,4 @@ public class External
     /// 是否省延期
     /// </summary>
     public bool IsProvinceDelay { get; set; }
-}
-
-//public class RejectDto : BasicWorkflowDto
-//{
-
-//}
+}

+ 6 - 0
src/Hotline.Share/Dtos/FlowEngine/RejectDto.cs

@@ -0,0 +1,6 @@
+namespace Hotline.Share.Dtos.FlowEngine;
+
+public class RejectDto : EndWorkflowDto
+{
+    public string WorkflowId { get; set; }
+}

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

@@ -681,12 +681,9 @@ namespace Hotline.FlowEngine.Workflows
         public async Task RejectAsync(Workflow workflow, BasicWorkflowDto dto, CancellationToken cancellationToken)
         {
             var currentStep = GetUnHandleStep(workflow.Steps, _sessionContext.RequiredOrgId, _sessionContext.RequiredUserId);
-            //var (currentStepBox, currentStep) = GetUnCompleteStep(workflow.Steps, _sessionContext.RequiredOrgId, _sessionContext.RequiredUserId);
-
             await HandleStepAsync(currentStep, workflow, dto, null, cancellationToken);
 
             var endStepDefine = workflow.WorkflowDefinition.FindEndStepDefine();
-
             var endTrace = await WorkflowEndAsync(workflow, dto, endStepDefine, currentStep, cancellationToken);
 
             await _mediator.Publish(new RejectNotify(workflow, dto), cancellationToken);