|
@@ -2337,7 +2337,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
//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))
|
|
|
+ if(!HasStepsAllHandled(workflow.Steps, countersignStartStep))
|
|
|
return nextSteps;
|
|
|
|
|
|
string? opinion = null;
|
|
@@ -2376,36 +2376,26 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
/// <summary>
|
|
|
/// 是否会签节点都已经办理完成(包含会签嵌套的判断)
|
|
|
/// </summary>
|
|
|
- private bool HasStepsAllHandledIncludeCountersign(List<WorkflowStep> steps, WorkflowStep countersignStartStep)
|
|
|
+ private bool HasStepsAllHandled(List<WorkflowStep> steps, WorkflowStep countersignStartStep)
|
|
|
{
|
|
|
- _logger.LogWarning($"wfId: {countersignStartStep.WorkflowId}, StartCountersignId: {countersignStartStep.StartCountersignId}");
|
|
|
- var innerSteps = steps.Where(d => d.CountersignId == countersignStartStep.StartCountersignId).ToList();
|
|
|
- _logger.LogWarning($"wfId: {countersignStartStep.WorkflowId}, innerSteps count: {innerSteps.Count}");
|
|
|
+ var countersignSteps = GetStepsCascade(steps, countersignStartStep);
|
|
|
+ return countersignSteps.All(d => d.Status == EWorkflowStepStatus.Handled);
|
|
|
+ }
|
|
|
|
|
|
- if (innerSteps.Any(d => d.Status != EWorkflowStepStatus.Handled)) return false;
|
|
|
- var csStartSteps = innerSteps.Where(d=>d.IsStartCountersign).ToList();
|
|
|
- if (csStartSteps.Any())
|
|
|
+ private List<WorkflowStep> GetStepsCascade(List<WorkflowStep> steps, WorkflowStep countersignStartStep)
|
|
|
+ {
|
|
|
+ _logger.LogWarning($"wfId: {countersignStartStep.WorkflowId}, stepId: {countersignStartStep.Id}");
|
|
|
+ var rsp = new List<WorkflowStep> { countersignStartStep };
|
|
|
+ if (!countersignStartStep.IsStartCountersign) return rsp;
|
|
|
+ var innerSteps = steps.Where(d => !string.IsNullOrEmpty(d.CountersignId)
|
|
|
+ && d.CountersignId == countersignStartStep.StartCountersignId).ToList();
|
|
|
+ _logger.LogWarning($"wfId: {countersignStartStep.WorkflowId}, innerSteps count: {innerSteps.Count}");
|
|
|
+ if (!innerSteps.Any()) return rsp;
|
|
|
+ foreach (var innerStep in innerSteps)
|
|
|
{
|
|
|
- _logger.LogWarning($"wfId: {countersignStartStep.WorkflowId}, csStartSteps count: {csStartSteps.Count}");
|
|
|
- foreach (var csStartStep in csStartSteps)
|
|
|
- {
|
|
|
- return HasStepsAllHandledIncludeCountersign(steps, csStartStep);
|
|
|
- }
|
|
|
+ rsp.AddRange(GetStepsCascade(steps, innerStep));
|
|
|
}
|
|
|
- //
|
|
|
- // foreach (var step in innerSteps)
|
|
|
- // {
|
|
|
- // if (step.Status != EWorkflowStepStatus.Handled)
|
|
|
- // {
|
|
|
- // _logger.LogWarning($"wfId: {countersignStartStep.WorkflowId}, step Id: {step.Id}, status: {step.Status}, result false");
|
|
|
- // return false;
|
|
|
- // }
|
|
|
- //
|
|
|
- // if (step.IsStartCountersign)
|
|
|
- // return HasStepsAllHandledIncludeCountersign(steps, step);
|
|
|
- // }
|
|
|
- _logger.LogWarning($"wfId: {countersignStartStep.WorkflowId}, result true");
|
|
|
- return true;
|
|
|
+ return rsp;
|
|
|
}
|
|
|
|
|
|
|