|
@@ -293,6 +293,20 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
{
|
|
|
var workflow = await GetWorkflowAsync(dto.WorkflowId, withDefine: true, withSteps: true,
|
|
|
withTraces: true, withCountersigns: true, cancellationToken: cancellationToken);
|
|
|
+
|
|
|
+ return await NextAsync(workflow, dto, handleMode, expiredTime, isAutoFillSummaryOpinion, currentStepConfig,
|
|
|
+ newStepConfig, cancellationToken);
|
|
|
+ }
|
|
|
+
|
|
|
+ public async Task<(Workflow, WorkflowStep, StepDefine, List<WorkflowStep>)> NextAsync(
|
|
|
+ Workflow workflow,
|
|
|
+ NextWorkflowDto dto,
|
|
|
+ EHandleMode handleMode = EHandleMode.Normal,
|
|
|
+ DateTime? expiredTime = null, bool isAutoFillSummaryOpinion = false,
|
|
|
+ Action<Workflow, WorkflowStep, StepDefine>? currentStepConfig = null,
|
|
|
+ Action<Workflow, WorkflowStep, StepDefine, WorkflowStep>? newStepConfig = null,
|
|
|
+ CancellationToken cancellationToken = default)
|
|
|
+ {
|
|
|
CheckWhetherRunnable(workflow.Status);
|
|
|
|
|
|
var currentStep = workflow.Steps.FirstOrDefault(d => d.Id == dto.StepId);
|
|
@@ -477,7 +491,8 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- await Task.Run(() => currentStepConfig?.Invoke(workflow, currentStep, nextStepDefine), cancellationToken);
|
|
|
+ //await Task.Run(() => currentStepConfig?.Invoke(workflow, currentStep, nextStepDefine), cancellationToken);
|
|
|
+ currentStepConfig?.Invoke(workflow, currentStep, nextStepDefine);
|
|
|
await _workflowStepRepository.UpdateRangeAsync(updateSteps, cancellationToken);
|
|
|
|
|
|
//更新traces
|
|
@@ -622,11 +637,10 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
var nextDto = _mapper.Map<NextWorkflowDto>(dto);
|
|
|
nextDto.WorkflowId = workflow.Id;
|
|
|
nextDto.StepId = startStep.Id;
|
|
|
- var (_, _, _, nextSteps) =
|
|
|
- await NextAsync(nextDto,
|
|
|
- expiredTime: expiredTime,
|
|
|
- isAutoFillSummaryOpinion: true,
|
|
|
- newStepConfig: newStepConfig, cancellationToken: cancellationToken);
|
|
|
+ var (_, _, _, nextSteps) = await NextAsync(workflow, nextDto,
|
|
|
+ expiredTime: expiredTime,
|
|
|
+ isAutoFillSummaryOpinion: true,
|
|
|
+ newStepConfig: newStepConfig, cancellationToken: cancellationToken);
|
|
|
return nextSteps;
|
|
|
}
|
|
|
|
|
@@ -1056,7 +1070,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
PreviousAsync(PreviousWorkflowDto dto,
|
|
|
EHandleMode handleMode = EHandleMode.Previous,
|
|
|
Action<Workflow, WorkflowStep, StepDefine, WorkflowStep, WorkflowStep>? newStepConfig = null,
|
|
|
- CancellationToken cancellationToken = default)
|
|
|
+ CancellationToken cancellationToken = default)
|
|
|
{
|
|
|
var workflow = await GetWorkflowAsync(dto.WorkflowId, withDefine: true, withSteps: true,
|
|
|
withTraces: true, withCountersigns: true, cancellationToken: cancellationToken);
|
|
@@ -1402,10 +1416,10 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
{
|
|
|
//根据汇总对象id找到被汇总节点
|
|
|
var summaryTargetStep = workflow.Steps.Where(d =>
|
|
|
- d.StepType == EStepType.Normal &&
|
|
|
- d.Code == summaryTargetStepCode &&
|
|
|
- d.Status == EWorkflowStepStatus.Handled &&
|
|
|
- d.IsOrigin)
|
|
|
+ d.StepType == EStepType.Normal &&
|
|
|
+ d.Code == summaryTargetStepCode &&
|
|
|
+ d.Status == EWorkflowStepStatus.Handled &&
|
|
|
+ d.IsOrigin)
|
|
|
.MaxBy(d => d.CreationTime);
|
|
|
if (summaryTargetStep is null)
|
|
|
throw UserFriendlyException.SameMessage("未查询到汇总对象节点");
|
|
@@ -2386,6 +2400,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
Status = EWorkflowStatus.Runnable,
|
|
|
Steps = new(),
|
|
|
Traces = new(),
|
|
|
+ Countersigns = new(),
|
|
|
WorkflowDefinition = definition,
|
|
|
ExternalId = externalId ?? string.Empty,
|
|
|
FlowType = definition.FlowType,
|
|
@@ -3499,7 +3514,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
}
|
|
|
|
|
|
private async Task<WorkflowTrace> CreateVisitTraceAsync(WorkflowTrace pubTrace, UserInfo acceptor, string orderVisitId,
|
|
|
- DateTime creationTime, CancellationToken cancellation)
|
|
|
+ DateTime creationTime, CancellationToken cancellation)
|
|
|
{
|
|
|
if (string.IsNullOrEmpty(orderVisitId))
|
|
|
throw new UserFriendlyException($"参数异常,orderVisitId不能为空, pubTraceId: {pubTrace.Id}");
|