|
@@ -286,8 +286,8 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
/// <summary>
|
|
|
/// 办理(流转至下一节点)
|
|
|
/// </summary>
|
|
|
- public async Task NextAsync(Workflow workflow, WorkflowStep currentStep, NextWorkflowDto dto, StepDefine nextStepDefine,
|
|
|
- FlowAssignInfo flowAssignInfo, DateTime expiredTime, CancellationToken cancellationToken)
|
|
|
+ public async Task NextAsync(Workflow workflow, WorkflowStep currentStep, NextWorkflowDto dto,
|
|
|
+ StepDefine nextStepDefine, FlowAssignInfo flowAssignInfo, CancellationToken cancellationToken)
|
|
|
{
|
|
|
//todo 1.汇总节点的创建不能简单看上级节点发起的是否全办完
|
|
|
ValidatePermission(workflow);
|
|
@@ -307,23 +307,23 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
//结束当前会签流程
|
|
|
if (currentStep.IsCountersignEndStep)
|
|
|
{
|
|
|
- var currentCountersign = workflow.Countersigns.FirstOrDefault(d => d.Id == currentStep.CountersignId);
|
|
|
- if (currentCountersign is null)
|
|
|
+ var countersignStartStep =
|
|
|
+ workflow.Steps.FirstOrDefault(d => d.Id == currentStep.CountersignStartStepId);
|
|
|
+ if (countersignStartStep is null)
|
|
|
throw new UserFriendlyException(
|
|
|
- $"未查询到对应会签信息,workflowId:{workflow.Id}, countersignId:{currentStep.CountersignId}", "无效会签编号");
|
|
|
+ $"未查询到会签开始step, workflowId: {workflow.Id}, currentStepId: {currentStep.Id}",
|
|
|
+ "未查询到会签开始节点");
|
|
|
|
|
|
- //1.根据当前节点配置查找结束节点对应开始节点 2.如该开始节点与当前会签开始节点吻合说明可以结束
|
|
|
-
|
|
|
- //如果!=,说明未发起会签而是继承的外层会签
|
|
|
- if (currentStep.CountersignStartStepId == currentCountersign.StartStepId)
|
|
|
+ if (countersignStartStep.IsStartCountersign)
|
|
|
{
|
|
|
- //结束step会签信息
|
|
|
- var countersignStartStep =
|
|
|
- workflow.Steps.FirstOrDefault(d => d.Id == currentStep.CountersignStartStepId);
|
|
|
- if (countersignStartStep is null)
|
|
|
+ var currentCountersign =
|
|
|
+ workflow.Countersigns.FirstOrDefault(d => d.Id == countersignStartStep.StartCountersignId);
|
|
|
+ if (currentCountersign is null)
|
|
|
throw new UserFriendlyException(
|
|
|
- $"未查询到会签开始step, workflowId: {workflow.Id}, startStepId: {currentCountersign.StartStepId}", "未查询到会签开始节点");
|
|
|
+ $"未查询到对应会签信息,workflowId:{workflow.Id}, countersignId:{currentStep.CountersignId}",
|
|
|
+ "无效会签编号");
|
|
|
|
|
|
+ //结束step会签信息
|
|
|
countersignStartStep.CountersignEnd();
|
|
|
updateSteps.Add(countersignStartStep);
|
|
|
|
|
@@ -390,7 +390,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
workflow.CenterToOrg(CalculateExpiredTime(workflow.WorkflowDefinition.Code));//todo 过期时间
|
|
|
|
|
|
//创建下一/N个节点(会签汇总节点:会签未全部办理时不创建,最后一个会签办理节点创建会签汇总节点)
|
|
|
- var nextSteps = await CreateNextStepsAsync(workflow, nextStepDefine, currentStep, dto, expiredTime, cancellationToken);
|
|
|
+ var nextSteps = await CreateNextStepsAsync(workflow, nextStepDefine, currentStep, dto, dto.StepExpiredTime, cancellationToken);
|
|
|
|
|
|
//赋值当前节点的下级办理节点
|
|
|
if (dto.IsStartCountersign
|
|
@@ -481,7 +481,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
if (csStartStep is null)
|
|
|
throw new UserFriendlyException("未查询到会签节点");
|
|
|
|
|
|
- nextSteps = await CreateCsEndStepsByPrevStepAsync(workflow, csStartStep, dto, cancellationToken);
|
|
|
+ nextSteps = await CreateCsEndStepsByPrevStepAsync(workflow, csStartStep, dto, expiredTime, cancellationToken);
|
|
|
}
|
|
|
}
|
|
|
else
|
|
@@ -489,7 +489,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
if (dto.BackToCountersignEnd)
|
|
|
{
|
|
|
//todo check if cs all complete, create next
|
|
|
- nextSteps = await CreateCsEndStepsByPrevStepAsync(workflow, currentStep, dto, cancellationToken);
|
|
|
+ nextSteps = await CreateCsEndStepsByPrevStepAsync(workflow, currentStep, dto, expiredTime, cancellationToken);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
@@ -541,7 +541,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
/// 根据传入节点的上一节点创建会签汇总节点(汇总传入节点的前一节点)
|
|
|
/// </summary>
|
|
|
private async Task<List<WorkflowStep>> CreateCsEndStepsByPrevStepAsync(Workflow workflow, WorkflowStep step,
|
|
|
- BasicWorkflowDto dto, CancellationToken cancellationToken)
|
|
|
+ BasicWorkflowDto dto, DateTime expiredTime, CancellationToken cancellationToken)
|
|
|
{
|
|
|
var prevStep = workflow.Steps.FirstOrDefault(d => d.Id == step.PrevStepId);
|
|
|
if (prevStep is null)
|
|
@@ -551,7 +551,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
if (prevStep.StartedCountersignHasAllHandled())
|
|
|
{
|
|
|
//todo 创建会签汇总节点
|
|
|
- var countersignEndStep = await CreateCountersignEndStepAsync(prevStep, dto, cancellationToken);
|
|
|
+ var countersignEndStep = await CreateCountersignEndStepAsync(prevStep, dto, expiredTime, cancellationToken);
|
|
|
nextSteps = new List<WorkflowStep> { countersignEndStep };
|
|
|
|
|
|
//create trace
|
|
@@ -564,7 +564,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
}
|
|
|
|
|
|
private async Task<WorkflowStep> CreateCountersignEndStepAsync(WorkflowStep countersignStartStep,
|
|
|
- BasicWorkflowDto dto, CancellationToken cancellationToken)
|
|
|
+ BasicWorkflowDto dto, DateTime expiredTime, CancellationToken cancellationToken)
|
|
|
{
|
|
|
var csEndStep = _mapper.Map<WorkflowStep>(countersignStartStep);
|
|
|
csEndStep.Status = EWorkflowStepStatus.WaitForAccept;
|
|
@@ -578,6 +578,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
csEndStep.CountersignStartStepId = countersignStartStep.Id;
|
|
|
csEndStep.Name = dto.NextStepName;
|
|
|
csEndStep.TimeLimit = GetTimeLimit(""); //todo 过期时间
|
|
|
+ csEndStep.StepExpiredTime = expiredTime;
|
|
|
csEndStep.Handlers = countersignStartStep.Handlers.Where(d => d.Key == countersignStartStep.HandlerId || d.Key == countersignStartStep.HandlerOrgId).ToList();
|
|
|
|
|
|
csEndStep.Reset();
|