Browse Source

fixed: 会签创建新节点

xf 5 months ago
parent
commit
f634342559
1 changed files with 21 additions and 5 deletions
  1. 21 5
      src/Hotline/FlowEngine/Workflows/WorkflowDomainService.cs

+ 21 - 5
src/Hotline/FlowEngine/Workflows/WorkflowDomainService.cs

@@ -2323,16 +2323,17 @@ namespace Hotline.FlowEngine.Workflows
         private async Task<List<WorkflowStep>> CreateCsEndStepsByTargetPrevAsync(Workflow workflow, WorkflowStep step,
             BasicWorkflowDto dto, DateTime? expiredTime, bool isAutoFillSummaryOpinion = false, CancellationToken cancellationToken = default)
         {
-            var countersignStartStep = workflow.Steps.FirstOrDefault(d => d.Id == step.PrevStepId);
-            //var countersignStartStep = workflow.Steps.FirstOrDefault(d => d.StartCountersignId == step.CountersignId);
+            //var countersignStartStep = workflow.Steps.FirstOrDefault(d => d.Id == step.PrevStepId);
+            var countersignStartStep = workflow.Steps.FirstOrDefault(d => d.StartCountersignId == step.CountersignId);
             if (countersignStartStep is null)
                 throw new UserFriendlyException("未查询到当前节点上级会签开启节点");
             var nextSteps = new List<WorkflowStep>();
             //会签未全部办理则不创建汇总节点
 
-            var csInnerSteps = workflow.Steps.Where(d => d.PrevStepId == countersignStartStep.Id).ToList();
-            if (csInnerSteps.Any(d =>
-                    d.Status != EWorkflowStepStatus.Handled || (d.IsStartCountersign && !d.IsStartedCountersignEnd)))
+            //var csInnerSteps = workflow.Steps.Where(d => d.PrevStepId == countersignStartStep.Id).ToList();
+            //if (csInnerSteps.Any(d =>
+            //        d.Status != EWorkflowStepStatus.Handled || (d.IsStartCountersign && !d.IsStartedCountersignEnd)))
+            if(!HasStepsAllHandledIncludeCountersign(workflow.Steps, countersignStartStep))
                 return nextSteps;
 
             string? opinion = null;
@@ -2368,6 +2369,21 @@ namespace Hotline.FlowEngine.Workflows
             return nextSteps;
         }
 
+        /// <summary>
+        /// 是否会签节点都已经办理完成(包含会签嵌套的判断)
+        /// </summary>
+        private bool HasStepsAllHandledIncludeCountersign(List<WorkflowStep> steps, WorkflowStep countersignStartStep)
+        {
+            var innerSteps = steps.Where(d => d.CountersignId == countersignStartStep.StartCountersignId).ToList();
+            foreach (var step in innerSteps)
+            {
+                if (step.Status != EWorkflowStepStatus.Handled) return false;
+                if (step.IsStartCountersign)
+                    return HasStepsAllHandledIncludeCountersign(steps, step);
+            }
+            return true;
+        }
+
 
         /// <summary>
         /// 以某一节点作为根节点开始查找最底层办理节点(需求:自动填充汇总节点意见)