|
@@ -135,7 +135,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
|
|
|
//firststeps
|
|
|
var firstSteps = await CreateNextStepsAsync(workflow, startStep, dto, firstStepDefine, assigner,
|
|
|
- isNextDynamic, flowAssignInfo.FlowAssignType, expiredTime, dto.IsStartCountersign, cancellationToken: cancellationToken);
|
|
|
+ isNextDynamic, expiredTime, dto.IsStartCountersign, cancellationToken: cancellationToken);
|
|
|
|
|
|
await _workflowStepRepository.UpdateAsync(startStep, cancellationToken);
|
|
|
|
|
@@ -274,7 +274,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
/// new
|
|
|
/// </summary>
|
|
|
public async Task<List<WorkflowStep>> NextAsync(ISessionContext current, NextWorkflowDto dto,
|
|
|
- ForwardFlowStepAssignInfo forwardFlowStepAssignInfo, DateTime? expiredTime = null, bool isAutoFillSummaryOpinion = false,
|
|
|
+ DateTime? expiredTime = null, bool isAutoFillSummaryOpinion = false,
|
|
|
Action<WorkflowStep>? stepConfig = null, CancellationToken cancellationToken = default)
|
|
|
{
|
|
|
var workflow = await GetWorkflowAsync(dto.WorkflowId, withDefine: true, withSteps: true,
|
|
@@ -330,9 +330,8 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
throw UserFriendlyException.SameMessage("下一会签汇总节点不允许发起会签");
|
|
|
}
|
|
|
|
|
|
- var flowAssignInfo =
|
|
|
- await GetNextStepFlowAssignInfoAsync(workflow, currentStep, dto, nextStepDefine, isNextDynamic, cancellationToken);
|
|
|
-
|
|
|
+ // var flowAssignInfo =
|
|
|
+ // await GetNextStepFlowAssignInfoAsync(workflow, currentStep, dto, nextStepDefine, isNextDynamic, cancellationToken);
|
|
|
dto.FlowAssignType ??= SetNextStepAssignInfo(workflow, currentStep, dto, nextStepDefine, isNextDynamic);
|
|
|
|
|
|
/*
|
|
@@ -356,7 +355,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
&& !dto.NextHandlers.Any())
|
|
|
{
|
|
|
//todo 指派给配置的角色
|
|
|
- flowAssignInfo.FlowAssignType = EFlowAssignType.Role;
|
|
|
+ dto.FlowAssignType = EFlowAssignType.Role;
|
|
|
var handler = nextStepDefine.HandlerTypeItems.First();
|
|
|
dto.NextHandlers.Add(new FlowStepHandler
|
|
|
{
|
|
@@ -513,7 +512,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
!d.IsCompleted() && !string.IsNullOrEmpty(current.UserId) && d.StarterId == current.UserId);
|
|
|
if (exists)
|
|
|
throw new UserFriendlyException($"该用户在当前流程存在未结束会签, workflowId: {workflow.Id}, userId: {current.UserId}");
|
|
|
- var countersign = await StartCountersignAsync(current, workflow, currentStep, dto, flowAssignInfo.FlowAssignType,
|
|
|
+ var countersign = await StartCountersignAsync(current, workflow, currentStep, dto,
|
|
|
counterSignType, expiredTime, cancellationToken);
|
|
|
currentTrace.StartCountersign(countersign.Id);
|
|
|
await _workflowStepRepository.UpdateAsync(currentStep, cancellationToken);
|
|
@@ -534,7 +533,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
|
|
|
//创建下一/N个节点(会签汇总节点:会签未全部办理时不创建,最后一个会签办理节点创建会签汇总节点)
|
|
|
var nextSteps = await CreateNextStepsAsync(workflow, currentStep, dto,
|
|
|
- nextStepDefine, assigner, isNextDynamic, flowAssignInfo.FlowAssignType, expiredTime, dto.IsStartCountersign,
|
|
|
+ nextStepDefine, assigner, isNextDynamic, expiredTime, dto.IsStartCountersign,
|
|
|
isAutoFillSummaryOpinion, stepConfig, cancellationToken);
|
|
|
|
|
|
// //更新办理对象(nextSteps无元素表示当前节点为会签办理节点且当前会签没有全部办理完成)
|
|
@@ -562,7 +561,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
#endregion
|
|
|
|
|
|
await _publisher.PublishAsync(
|
|
|
- new NextStepNotify(workflow, dto, flowAssignInfo, currentTrace, nextStepDefine,
|
|
|
+ new NextStepNotify(workflow, dto, currentTrace, nextStepDefine,
|
|
|
current.OrgId, expiredTime.HasValue), PublishStrategy.ParallelWhenAll,
|
|
|
cancellationToken);
|
|
|
|
|
@@ -1614,8 +1613,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
var targetStepNew = targetIsStartStep
|
|
|
? await CreateStartStepAsync(workflow, targetStepDefine, dto, assigner,
|
|
|
stepAssignInfo, traceType, expiredTime, stepAssignInfo.FlowAssignType, cancellationToken)
|
|
|
- : (await CreateStepsAsync(workflow, targetStepDefine, targetPrevStep, dto, assigner,
|
|
|
- stepAssignInfo.FlowAssignType, [stepAssignInfo],
|
|
|
+ : (await CreateStepsAsync(workflow, targetStepDefine, targetPrevStep, dto, assigner, [stepAssignInfo],
|
|
|
null, EWorkflowStepStatus.WaitForAccept, ECountersignPosition.None, true, traceType,
|
|
|
null, expiredTime, stepConfig: stepConfig, cancellationToken: cancellationToken)).First();
|
|
|
|
|
@@ -1696,7 +1694,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
// handleMode, cancellationToken);
|
|
|
await RecallAsync(workflow, dto, reverseFlowStepAssignInfo, startStepDefine, startStep,
|
|
|
EWorkflowTraceType.Recall, expiredTime, isOrderFiled,
|
|
|
- handleMode, cancellationToken);
|
|
|
+ handleMode, cancellationToken: cancellationToken);
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
@@ -1744,7 +1742,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
|
|
|
await RecallAsync(workflow, dto, reverseFlowStepAssignInfo, sendStepDefine, sendStep,
|
|
|
EWorkflowTraceType.Recall, expiredTime, isOrderFiled,
|
|
|
- handleMode, cancellationToken);
|
|
|
+ handleMode, cancellationToken: cancellationToken);
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
@@ -2394,7 +2392,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
/// 创建下1/N个节点
|
|
|
/// </summary>
|
|
|
private async Task<List<WorkflowStep>> CreateNextStepsAsync(Workflow workflow, WorkflowStep currentStep,
|
|
|
- BasicWorkflowDto dto, StepDefine nextStepDefine, UserInfo assigner, bool isNextDynamic, EFlowAssignType flowAssignType,
|
|
|
+ BasicWorkflowDto dto, StepDefine nextStepDefine, UserInfo assigner, bool isNextDynamic,
|
|
|
DateTime? expiredTime, bool isStartCountersign, bool isAutoFillSummaryOpinion = false,
|
|
|
Action<WorkflowStep>? stepConfig = null, CancellationToken cancellationToken = default)
|
|
|
{
|
|
@@ -2411,13 +2409,13 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
{
|
|
|
//依据会签策略创建会签下一级节点
|
|
|
nextSteps = await CreateCountersignStepsAsync(workflow, nextStepDefine, currentStep, dto,
|
|
|
- assigner, flowAssignType, expiredTime, cancellationToken);
|
|
|
+ assigner, expiredTime, stepConfig, cancellationToken);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
//创建普通节点(根据配置)
|
|
|
nextSteps = await CreateConfigStepsAsync(workflow, nextStepDefine, currentStep, dto, assigner,
|
|
|
- flowAssignType, EWorkflowTraceType.Normal, expiredTime, isAutoFillSummaryOpinion, cancellationToken);
|
|
|
+ EWorkflowTraceType.Normal, expiredTime, isAutoFillSummaryOpinion, stepConfig, cancellationToken);
|
|
|
}
|
|
|
}
|
|
|
else
|
|
@@ -2436,7 +2434,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
{
|
|
|
//依据会签策略创建会签下一级节点
|
|
|
nextSteps = await CreateCountersignStepsAsync(workflow, nextStepDefine, currentStep, dto,
|
|
|
- assigner, flowAssignType, expiredTime, cancellationToken);
|
|
|
+ assigner, expiredTime, stepConfig, cancellationToken);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -2452,7 +2450,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
{
|
|
|
//依据会签策略创建会签下一级节点
|
|
|
nextSteps = await CreateCountersignStepsAsync(workflow, nextStepDefine, currentStep, dto,
|
|
|
- assigner, flowAssignType, expiredTime, cancellationToken);
|
|
|
+ assigner, expiredTime, stepConfig, cancellationToken);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -2460,19 +2458,19 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
{
|
|
|
//依据会签策略创建会签下一级节点
|
|
|
nextSteps = await CreateCountersignStepsAsync(workflow, nextStepDefine, currentStep, dto,
|
|
|
- assigner, flowAssignType, expiredTime, cancellationToken);
|
|
|
+ assigner, expiredTime, stepConfig, cancellationToken);
|
|
|
}
|
|
|
else if (isNextDynamic)
|
|
|
{
|
|
|
//创建动态下一级节点
|
|
|
- nextSteps = await CreateDynamicStepsAsync(workflow, nextStepDefine, currentStep, dto, assigner, flowAssignType,
|
|
|
- expiredTime, cancellationToken);
|
|
|
+ nextSteps = await CreateDynamicStepsAsync(workflow, nextStepDefine, currentStep, dto, assigner,
|
|
|
+ expiredTime, stepConfig, cancellationToken);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
//创建普通节点(根据配置)
|
|
|
- nextSteps = await CreateConfigStepsAsync(workflow, nextStepDefine, currentStep, dto, assigner, flowAssignType,
|
|
|
- EWorkflowTraceType.Normal, expiredTime, isAutoFillSummaryOpinion, cancellationToken);
|
|
|
+ nextSteps = await CreateConfigStepsAsync(workflow, nextStepDefine, currentStep, dto, assigner,
|
|
|
+ EWorkflowTraceType.Normal, expiredTime, isAutoFillSummaryOpinion, stepConfig, cancellationToken);
|
|
|
}
|
|
|
|
|
|
return nextSteps;
|
|
@@ -2497,7 +2495,6 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
WorkflowStep prevStep,
|
|
|
BasicWorkflowDto dto,
|
|
|
UserInfo assigner,
|
|
|
- EFlowAssignType flowAssignType,
|
|
|
DateTime? expiredTime,
|
|
|
Action<WorkflowStep>? stepConfig = null,
|
|
|
CancellationToken cancellationToken = default)
|
|
@@ -2519,7 +2516,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
};
|
|
|
|
|
|
return await CreateStepsAsync(workflow, nextStepDefine, prevStep, dto, assigner,
|
|
|
- flowAssignType, dto.NextHandlers, null, EWorkflowStepStatus.WaitForAccept,
|
|
|
+ dto.NextHandlers, null, EWorkflowStepStatus.WaitForAccept,
|
|
|
ECountersignPosition.None, false, EWorkflowTraceType.Normal, handlerType, expiredTime,
|
|
|
stepConfig: stepConfig, cancellationToken: cancellationToken);
|
|
|
}
|
|
@@ -2530,7 +2527,6 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
WorkflowStep prevStep,
|
|
|
BasicWorkflowDto dto,
|
|
|
UserInfo assigner,
|
|
|
- EFlowAssignType flowAssignType,
|
|
|
DateTime? expiredTime,
|
|
|
Action<WorkflowStep>? stepConfig = null,
|
|
|
CancellationToken cancellationToken = default
|
|
@@ -2546,7 +2542,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
? ECountersignPosition.Direct
|
|
|
: ECountersignPosition.Indirect;
|
|
|
|
|
|
- return CreateStepsAsync(workflow, stepDefine, prevStep, dto, assigner, flowAssignType, dto.NextHandlers,
|
|
|
+ return CreateStepsAsync(workflow, stepDefine, prevStep, dto, assigner, dto.NextHandlers,
|
|
|
countersignId, EWorkflowStepStatus.WaitForAccept, nextStepCountersignPosition,
|
|
|
false, EWorkflowTraceType.Normal, handlerType, expiredTime, stepConfig: stepConfig, cancellationToken: cancellationToken);
|
|
|
}
|
|
@@ -2741,7 +2737,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
/// 开始会签(创建会签数据,更新currentStep会签数据)
|
|
|
/// </summary>
|
|
|
private async Task<WorkflowCountersign> StartCountersignAsync(ISessionContext current, Workflow workflow, WorkflowStep startStep,
|
|
|
- BasicWorkflowDto dto, EFlowAssignType? flowAssignType, ECounterSignType? counterSignType, DateTime? expiredTime,
|
|
|
+ BasicWorkflowDto dto, ECounterSignType? counterSignType, DateTime? expiredTime,
|
|
|
CancellationToken cancellationToken)
|
|
|
{
|
|
|
var countersignId = startStep.CountersignId;
|
|
@@ -2752,7 +2748,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
}
|
|
|
|
|
|
var countersign = await CreateCountersignAsync(current, workflow, startStep,
|
|
|
- dto.NextHandlers.Select(d => new Kv(d.Key, d.Value)).ToList(), flowAssignType,
|
|
|
+ dto.NextHandlers.Select(d => new Kv(d.Key, d.Value)).ToList(), dto.FlowAssignType,
|
|
|
counterSignType, expiredTime, countersignId, cancellationToken);
|
|
|
startStep.StartCountersign(countersign.Id);
|
|
|
return countersign;
|
|
@@ -3159,8 +3155,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
var targetStepNew = targetIsStartStep
|
|
|
? await CreateStartStepAsync(workflow, targetStepDefine, dto, assigner,
|
|
|
dto.NextHandlers.First(), traceType, expiredTime, flowAssignInfo.FlowAssignType, cancellationToken)
|
|
|
- : (await CreateStepsAsync(workflow, targetStepDefine, targetPrevStep, dto, assigner,
|
|
|
- flowAssignInfo.FlowAssignType, dto.NextHandlers,
|
|
|
+ : (await CreateStepsAsync(workflow, targetStepDefine, targetPrevStep, dto, assigner, dto.NextHandlers,
|
|
|
null, EWorkflowStepStatus.WaitForAccept, ECountersignPosition.None, true, traceType,
|
|
|
null, expiredTime, cancellationToken: cancellationToken)).First();
|
|
|
|
|
@@ -3277,35 +3272,34 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
WorkflowStep prevStep,
|
|
|
BasicWorkflowDto dto,
|
|
|
UserInfo assigner,
|
|
|
- EFlowAssignType flowAssignType,
|
|
|
EWorkflowTraceType traceType,
|
|
|
DateTime? expiredTime,
|
|
|
bool isAutoFillSummaryOpinion = false,
|
|
|
Action<WorkflowStep>? stepConfig = null,
|
|
|
CancellationToken cancellationToken = default)
|
|
|
{
|
|
|
- List<FlowStepHandler> handlers;
|
|
|
- if (stepDefine.HandlerType != EHandlerType.Role && !dto.NextHandlers.Any())
|
|
|
- throw new UserFriendlyException("未指定节点处理者");
|
|
|
- if (stepDefine.HandlerType == EHandlerType.Role && !dto.NextHandlers.Any())
|
|
|
- {
|
|
|
- var handler = stepDefine.HandlerTypeItems.First();
|
|
|
- handlers = new List<FlowStepHandler>
|
|
|
- {
|
|
|
- new() { Key = handler.Key, Value = handler.Value, RoleId = handler.Key, RoleName = handler.Value }
|
|
|
- };
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- handlers = dto.NextHandlers;
|
|
|
- }
|
|
|
+ // List<FlowStepHandler> handlers;
|
|
|
+ // if (stepDefine.HandlerType != EHandlerType.Role && !dto.NextHandlers.Any())
|
|
|
+ // throw new UserFriendlyException("未指定节点处理者");
|
|
|
+ // if (stepDefine.HandlerType == EHandlerType.Role && !dto.NextHandlers.Any())
|
|
|
+ // {
|
|
|
+ // var handler = stepDefine.HandlerTypeItems.First();
|
|
|
+ // handlers = new List<FlowStepHandler>
|
|
|
+ // {
|
|
|
+ // new() { Key = handler.Key, Value = handler.Value, RoleId = handler.Key, RoleName = handler.Value }
|
|
|
+ // };
|
|
|
+ // }
|
|
|
+ // else
|
|
|
+ // {
|
|
|
+ // handlers = dto.NextHandlers;
|
|
|
+ // }
|
|
|
|
|
|
string? opinion = null;
|
|
|
if (isAutoFillSummaryOpinion && stepDefine.StepType is EStepType.Summary)
|
|
|
opinion = prevStep.Opinion;
|
|
|
|
|
|
return await CreateStepsAsync(workflow, stepDefine, prevStep, dto,
|
|
|
- assigner, flowAssignType, handlers, null,
|
|
|
+ assigner, dto.NextHandlers, null,
|
|
|
EWorkflowStepStatus.WaitForAccept, ECountersignPosition.None,
|
|
|
true, traceType, null, expiredTime, opinion, stepConfig, cancellationToken);
|
|
|
}
|
|
@@ -3317,7 +3311,6 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
BasicWorkflowDto dto,
|
|
|
//bool isStartCountersign,
|
|
|
UserInfo assigner,
|
|
|
- EFlowAssignType? flowAssignType,
|
|
|
List<FlowStepHandler> handlers,
|
|
|
string? countersignId,
|
|
|
EWorkflowStepStatus stepStatus,
|
|
@@ -3335,7 +3328,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
foreach (var handler in handlers)
|
|
|
{
|
|
|
var isMain = handlers.Count == 1 || (handlers.Count > 1 && handler.Key == dto.NextMainHandler);
|
|
|
- var step = CreateStep(workflow, stepDefine, prevStep, flowAssignType,
|
|
|
+ var step = CreateStep(workflow, stepDefine, prevStep, dto.FlowAssignType,
|
|
|
handler, assigner, dto.NextStepCode, countersignId, stepStatus, csPosition, expiredTime,
|
|
|
dto.NextStepName, isOrigin, isMain, handlerType, dto.BusinessType, dto.FlowDirection, opinion);
|
|
|
|