Просмотр исходного кода

普通节点往汇总节点办理时不选办理对象时主动去查之前的办理对象

xf 6 месяцев назад
Родитель
Сommit
140340d9e7

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

@@ -588,7 +588,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
         {
             var success = int.TryParse(stepDefine.HandlerTypeItems.First().Key, out var level);
             int? orgLevel = success ? level : null;
-            var nextStepOption =   new NextStepOption
+            var nextStepOption = new NextStepOption
             {
                 Key = stepDefine.Code,
                 Value = stepDefine.Name,
@@ -603,12 +603,12 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
                 dto.OrgIds.Contains(d.ParentId))
                 .ToListAsync(cancellationToken);
             nextStepOption.Items = orgs.Select(d => new FlowStepHandler
-                {
-                    Key = d.Id,
-                    Value = d.Name,
-                    OrgId = d.Id,
-                    OrgName = d.Name
-                })
+            {
+                Key = d.Id,
+                Value = d.Name,
+                OrgId = d.Id,
+                OrgName = d.Name
+            })
                 .ToList();
             nextStepOption.FlowDirection = _workflowDomainService.GetFlowDirection(dto.BusinessType, stepDefine.BusinessType);
             stepOptions.Add(nextStepOption);
@@ -886,26 +886,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
             //汇总节点只能选择对应节点办理对象
             if (workflow.FlowType is EFlowType.Handle && stepDefine.StepType is EStepType.Summary)
             {
-                //根据汇总对象id找到被汇总节点
-                var summaryTargetStep = workflow.Steps.FirstOrDefault(d =>
-                    d.StepType == EStepType.Normal &&
-                    d.Code == stepDefine.SummaryTargetCode &&
-                    d.Status == EWorkflowStepStatus.Handled &&
-                    d.IsOrigin);
-                if (summaryTargetStep is null)
-                    throw UserFriendlyException.SameMessage("未查询到汇总对象节点");
-
-                var handler = new FlowStepHandler
-                {
-                    Key = summaryTargetStep.HandlerId,
-                    Value = summaryTargetStep.HandlerName,
-                    UserId = summaryTargetStep.HandlerId,
-                    Username = summaryTargetStep.HandlerName,
-                    OrgId = summaryTargetStep.HandlerOrgId,
-                    OrgName = summaryTargetStep.HandlerOrgName,
-                    RoleId = summaryTargetStep.RoleId,
-                    RoleName = summaryTargetStep.RoleName
-                };
+                var handler = _workflowDomainService.GetSummaryTargetFlowStepHandler(workflow, stepDefine.SummaryTargetCode);
 
                 nextStepOption = new NextStepOption
                 {

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

@@ -292,5 +292,10 @@ namespace Hotline.FlowEngine.Workflows
         /// </summary>
         /// <returns></returns>
         Task<ICollection<WorkflowStep>> GetUnhandleStepsByOthersAsync(string workflowId, CancellationToken cancellationToken);
+
+        /// <summary>
+        /// 根据汇总对象id找到被汇总节点,生成指派到用户的办理对象
+        /// </summary>
+        FlowStepHandler GetSummaryTargetFlowStepHandler(Workflow workflow, string summaryTargetStepCode);
     }
 }

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

@@ -282,6 +282,13 @@ namespace Hotline.FlowEngine.Workflows
                 nextStepDefine = GetStepDefine(workflow.WorkflowDefinition, dto.NextStepCode);
             }
 
+            //普通节点往汇总节点办理时可以不选,不选的场景主动去查之前的办理对象
+            if (nextStepDefine.StepType is EStepType.Summary && !dto.NextHandlers.Any())
+            {
+                var handler = GetSummaryTargetFlowStepHandler(workflow, nextStepDefine.SummaryTargetCode);
+                dto.NextHandlers.Add(handler);
+            }
+
             //需求:按角色选择办理人可以不选,表示该角色下所有人都可以办理,同时依据配置:是否本部门人办理显示待选办理人。角色下只要一人办理即可(即:角色下不发起会签)
             if (nextStepDefine.HandlerType != EHandlerType.Role && !dto.NextHandlers.Any())
                 throw new UserFriendlyException("未指定节点处理者");
@@ -1366,6 +1373,37 @@ namespace Hotline.FlowEngine.Workflows
                 .ToListAsync(cancellationToken);
         }
 
+        /// <summary>
+        /// 根据汇总对象id找到被汇总节点,生成指派到用户的办理对象
+        /// </summary>
+        /// <param name="workflow"></param>
+        /// <param name="stepDefine"></param>
+        /// <returns></returns>
+        public FlowStepHandler GetSummaryTargetFlowStepHandler(Workflow workflow, string summaryTargetStepCode)
+        {
+            //根据汇总对象id找到被汇总节点
+            var summaryTargetStep = workflow.Steps.FirstOrDefault(d =>
+                d.StepType == EStepType.Normal &&
+                d.Code == summaryTargetStepCode &&
+                d.Status == EWorkflowStepStatus.Handled &&
+                d.IsOrigin);
+            if (summaryTargetStep is null)
+                throw UserFriendlyException.SameMessage("未查询到汇总对象节点");
+
+            var handler = new FlowStepHandler
+            {
+                Key = summaryTargetStep.HandlerId,
+                Value = summaryTargetStep.HandlerName,
+                UserId = summaryTargetStep.HandlerId,
+                Username = summaryTargetStep.HandlerName,
+                OrgId = summaryTargetStep.HandlerOrgId,
+                OrgName = summaryTargetStep.HandlerOrgName,
+                RoleId = summaryTargetStep.RoleId,
+                RoleName = summaryTargetStep.RoleName
+            };
+            return handler;
+        }
+
         /// <summary>
         /// 查找当前会签内所有节点(含start,end)
         /// </summary>