xf 5 сар өмнө
parent
commit
a054497b35

+ 16 - 2
src/Hotline.Api/Controllers/OrderController.cs

@@ -3917,17 +3917,31 @@ public class OrderController : BaseController
     /// <summary>
     /// 批量归档
     /// </summary>
+    /// <returns>成功总量</returns>
     [HttpPost("batch-file")]
-    public async Task BatchFile([FromBody]OrderBatchFileDto dto)
+    public async Task<int> BatchFile([FromBody]OrderBatchFileDto dto)
     {
         var orders = await _orderRepository.Queryable()
+            .Includes(w=>w.Workflow,d => d.WorkflowDefinition)
+            .Includes(w=>w.Workflow,d => d.Steps)
+            .Includes(w=>w.Workflow,d => d.Traces)
             .Where(d => dto.OrderIds.Contains(d.Id))
             .ToListAsync(HttpContext.RequestAborted);
+        var success = 0;
         foreach (var order in orders)
         {
-            await _workflowDomainService.JumpToEndAsync(_sessionContext, order.WorkflowId,dto.Opinion,dto.Files,
+            var startStep = order.Workflow.Steps.Where(d => d.StepType == EStepType.Start && d.IsOrigin)
+                .MaxBy(d => d.CreationTime);
+            if (startStep?.Status is not EWorkflowStepStatus.Handled || string.IsNullOrEmpty(startStep.Opinion))
+                continue;
+            var opinion = startStep.Opinion;
+
+            await _workflowDomainService.JumpToEndAsync(_sessionContext, order.Workflow, opinion, dto.Files,
                 order.ExpiredTime, cancellationToken: HttpContext.RequestAborted);
+            success++;
         }
+
+        return success;
     }
 
     #endregion

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

@@ -957,7 +957,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
                         UserId = d.Id,
                         Username = d.Name,
                         OrgId = d.OrgId,
-                        OrgName = d.Organization.Name,
+                        OrgName = d.Organization?.Name,
                         RoleId = defineTypeItem.Key,
                         RoleName = defineTypeItem.Value
                     })

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

@@ -292,5 +292,8 @@ namespace Hotline.FlowEngine.Workflows
         /// </summary>
         Task JumpToEndAsync(ISessionContext current,string workflowId, string opinion, List<FileDto> files, DateTime? expiredTime,
             EReviewResult reviewResult = EReviewResult.Unknown, CancellationToken cancellationToken = default);
+
+        Task JumpToEndAsync(ISessionContext current, Workflow workflow, string opinion, List<FileDto> files, DateTime? expiredTime,
+            EReviewResult reviewResult = EReviewResult.Unknown, CancellationToken cancellationToken = default);
     }
 }

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

@@ -1444,6 +1444,15 @@ namespace Hotline.FlowEngine.Workflows
         {
             var workflow = await GetWorkflowAsync(workflowId, withDefine: true, withSteps: true, withTraces: true,
                 withCountersigns: true, cancellationToken: cancellationToken);
+            await JumpToEndAsync(current, workflow, opinion, files, expiredTime, reviewResult, cancellationToken);
+        }
+
+        /// <summary>
+        /// 跳转至结束节点(无视流程模板配置以及当前办理对象,直接跳至结束节点)
+        /// </summary>
+        public async Task JumpToEndAsync(ISessionContext current, Workflow workflow, string opinion, List<FileDto> files, DateTime? expiredTime,
+            EReviewResult reviewResult = EReviewResult.Unknown, CancellationToken cancellationToken = default)
+        {
             var endStepDefine = workflow.WorkflowDefinition.FindEndStepDefine();
             if (endStepDefine is null)
                 throw new UserFriendlyException("未正确配置结束节点");