|
@@ -56,8 +56,10 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
_fileRepository = fileRepository;
|
|
|
}
|
|
|
|
|
|
- public async Task<Workflow> CreateWorkflowAsync(WorkflowModule wfModule, string title, string userId, string userCode,
|
|
|
- string? externalId = null, string? timelimit = null, int? timelimitCount = null, ETimeType? timeType = null, DateTime? expiredTime = null,
|
|
|
+ public async Task<Workflow> CreateWorkflowAsync(WorkflowModule wfModule, string title, string userId,
|
|
|
+ string userCode,
|
|
|
+ string? externalId = null, string? timelimit = null, int? timelimitCount = null, ETimeType? timeType = null,
|
|
|
+ DateTime? expiredTime = null,
|
|
|
CancellationToken cancellationToken = default)
|
|
|
{
|
|
|
var definition = wfModule.Definition;
|
|
@@ -93,8 +95,8 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
/// <summary>
|
|
|
/// 流程开始
|
|
|
/// </summary>
|
|
|
- public async Task StartAsync(Workflow workflow, WorkflowStep startStep, BasicWorkflowDto dto, StepDefine firstStepDefine,
|
|
|
- FlowAssignInfo flowAssignInfo, CancellationToken cancellationToken)
|
|
|
+ public async Task StartAsync(Workflow workflow, WorkflowStep startStep, BasicWorkflowDto dto,
|
|
|
+ StepDefine firstStepDefine, FlowAssignInfo flowAssignInfo, CancellationToken cancellationToken)
|
|
|
{
|
|
|
//1. 创建first节点 (和trace)2.办理开始节点
|
|
|
|
|
@@ -106,7 +108,8 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
|
|
|
//办理开始节点
|
|
|
var counterSignType = GetCounterSignType(startStep.BusinessType);
|
|
|
- await HandleStepAsync(startStep, workflow, dto, counterSignType, cancellationToken);
|
|
|
+ await HandleStepAsync(startStep, workflow, dto, flowAssignInfo.FlowAssignType, counterSignType,
|
|
|
+ cancellationToken);
|
|
|
//赋值当前节点的下级办理节点
|
|
|
if (dto.IsStartCountersign)
|
|
|
startStep.CreateCountersignSteps(firstSteps);
|
|
@@ -228,7 +231,8 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
//工单完成以后查看的场景
|
|
|
if (workflow.Status != EWorkflowStatus.Runnable) return;
|
|
|
|
|
|
- var currentStep = GetUnHandleStep(workflow.Steps, _sessionContext.RequiredOrgId, _sessionContext.RequiredUserId);
|
|
|
+ var currentStep = GetUnHandleStep(workflow.Steps, _sessionContext.RequiredOrgId,
|
|
|
+ _sessionContext.RequiredUserId);
|
|
|
if (currentStep.Status is not EWorkflowStepStatus.WaitForAccept) return;
|
|
|
|
|
|
if (currentStep.Handlers.All(d => d.Key != orgId && d.Key != userId)) return;
|
|
@@ -276,13 +280,16 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
|
|
|
if (dto.Files.Any())
|
|
|
currentStep.FileJson =
|
|
|
- await _fileRepository.AddFileAsync(dto.Files, workflow.ExternalId, currentStep.Id, cancellationToken);
|
|
|
+ await _fileRepository.AddFileAsync(dto.Files, workflow.ExternalId, currentStep.Id,
|
|
|
+ cancellationToken);
|
|
|
|
|
|
var counterSignType = GetCounterSignType(currentStep.BusinessType);
|
|
|
|
|
|
- await HandleStepAsync(currentStep, workflow, dto, counterSignType, cancellationToken);
|
|
|
+ await HandleStepAsync(currentStep, workflow, dto, flowAssignInfo.FlowAssignType, counterSignType,
|
|
|
+ cancellationToken);
|
|
|
+
|
|
|
+ currentStep.IsActualHandled = CheckIsActualHandle(workflow, currentStep, nextStepDefine, dto);
|
|
|
|
|
|
- //update realhandle info
|
|
|
_mapper.Map(dto, workflow);
|
|
|
|
|
|
var updateSteps = new List<WorkflowStep> { currentStep };
|
|
@@ -319,20 +326,36 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- //操作为回到会签汇总时,更新开始会签节点的会签办理状态
|
|
|
- if (currentStep.IsInCountersign() && dto.BackToCountersignEnd)
|
|
|
+ if (currentStep.IsInCountersign())
|
|
|
{
|
|
|
- if (currentStep.IsCountersignEndStep)
|
|
|
+ //操作为回到会签汇总时,更新开始会签节点的会签办理状态
|
|
|
+ if (dto.BackToCountersignEnd)
|
|
|
{
|
|
|
- //汇总节点(非顶级)
|
|
|
- var csStartStep = workflow.Steps.FirstOrDefault(d => d.Id == currentStep.CountersignStartStepId);
|
|
|
- if (csStartStep is null)
|
|
|
- throw new UserFriendlyException("未查询到会签开始节点");
|
|
|
- PrevStepCsHandled(workflow, csStartStep, ref updateSteps);
|
|
|
+ if (currentStep.IsCountersignEndStep)
|
|
|
+ {
|
|
|
+ //汇总节点(非顶级)
|
|
|
+ var csStartStep =
|
|
|
+ workflow.Steps.FirstOrDefault(d => d.Id == currentStep.CountersignStartStepId);
|
|
|
+ if (csStartStep is null)
|
|
|
+ throw new UserFriendlyException("未查询到会签开始节点");
|
|
|
+ PrevStepCsHandled(workflow, csStartStep, ref updateSteps);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ PrevStepCsHandled(workflow, currentStep, ref updateSteps);
|
|
|
+ }
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- PrevStepCsHandled(workflow, currentStep, ref updateSteps);
|
|
|
+ //会签中正常办理节点,更新会签members办理状态
|
|
|
+ var countersign = workflow.Countersigns.FirstOrDefault(d => d.Id == currentStep.CountersignId);
|
|
|
+ if (countersign is null)
|
|
|
+ throw new UserFriendlyException(
|
|
|
+ $"会签数据异常, workflowId: {currentStep.WorkflowId}, countersignId: {currentStep.CountersignId}",
|
|
|
+ "会签数据异常");
|
|
|
+ countersign.MemberHandled(_sessionContext.RequiredUserId, _sessionContext.RequiredOrgId);
|
|
|
+ //update cs
|
|
|
+ await _workflowCountersignRepository.UpdateAsync(countersign, cancellationToken);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -380,7 +403,8 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
|
|
|
//赋值当前节点的下级办理节点
|
|
|
if (dto.IsStartCountersign
|
|
|
- || (currentStep.IsInCountersign() && !currentStep.IsTopCountersignEndStep(workflow.TopCountersignStepId)))
|
|
|
+ || (currentStep.IsInCountersign() &&
|
|
|
+ !currentStep.IsTopCountersignEndStep(workflow.TopCountersignStepId)))
|
|
|
{
|
|
|
currentStep.CreateCountersignSteps(nextSteps);
|
|
|
await _workflowStepRepository.UpdateAsync(currentStep, cancellationToken);
|
|
@@ -406,6 +430,10 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
//更新指派信息
|
|
|
workflow.Assign(flowAssignInfo.FlowAssignType, flowAssignInfo.GetHandlerIds());
|
|
|
|
|
|
+ //更新会签实际办理对象信息
|
|
|
+ if (currentStep.IsActualHandled)
|
|
|
+ workflow.AddCsActualHandler(_sessionContext.RequiredUserId, _sessionContext.RequiredOrgId);
|
|
|
+
|
|
|
await _workflowRepository.UpdateAsync(workflow, cancellationToken);
|
|
|
|
|
|
#endregion
|
|
@@ -432,7 +460,8 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
if (workflow.IsInCountersign)
|
|
|
throw UserFriendlyException.SameMessage("会签流程不支持退回");
|
|
|
|
|
|
- var currentStep = GetUnHandleStep(workflow.Steps, _sessionContext.RequiredOrgId, _sessionContext.RequiredUserId);
|
|
|
+ var currentStep = GetUnHandleStep(workflow.Steps, _sessionContext.RequiredOrgId,
|
|
|
+ _sessionContext.RequiredUserId);
|
|
|
|
|
|
if (currentStep.StepType is EStepType.Start)
|
|
|
throw UserFriendlyException.SameMessage("当前流程已退回到开始节点");
|
|
@@ -446,13 +475,15 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
var trace = await PreviousTraceAsync(workflow.Id, dto, currentStep, cancellationToken);
|
|
|
//保存附件
|
|
|
if (dto.Files.Any())
|
|
|
- trace.FileJson = await _fileRepository.AddFileAsync(dto.Files, workflow.ExternalId, trace.Id, cancellationToken);
|
|
|
+ trace.FileJson =
|
|
|
+ await _fileRepository.AddFileAsync(dto.Files, workflow.ExternalId, trace.Id, cancellationToken);
|
|
|
|
|
|
//复制上一个节点为待接办
|
|
|
var newPrevStep = await CreatePrevStepAsync(workflow, prevStep, cancellationToken);
|
|
|
|
|
|
//remove workflow.steps
|
|
|
- await _workflowStepRepository.RemoveRangeAsync(new List<WorkflowStep> { currentStep, prevStep }, cancellationToken);
|
|
|
+ await _workflowStepRepository.RemoveRangeAsync(new List<WorkflowStep> { currentStep, prevStep },
|
|
|
+ cancellationToken);
|
|
|
|
|
|
if (workflow.Status is EWorkflowStatus.Completed)
|
|
|
workflow.SetStatusRunnable();
|
|
@@ -576,7 +607,8 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
workflow.ResetHandlers(flowAssignInfo.FlowAssignType, flowAssignInfo.HandlerObjects);
|
|
|
await _workflowRepository.UpdateAsync(workflow, cancellationToken);
|
|
|
|
|
|
- await _mediator.Publish(new JumpNotify(workflow, targetStep, dto, flowAssignInfo, isCenterToOrg, isOrgToCenter),
|
|
|
+ await _mediator.Publish(
|
|
|
+ new JumpNotify(workflow, targetStep, dto, flowAssignInfo, isCenterToOrg, isOrgToCenter),
|
|
|
cancellationToken);
|
|
|
}
|
|
|
|
|
@@ -614,11 +646,13 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
/// <returns></returns>
|
|
|
public async Task RejectAsync(Workflow workflow, BasicWorkflowDto dto, CancellationToken cancellationToken)
|
|
|
{
|
|
|
- var currentStep = GetUnHandleStep(workflow.Steps, _sessionContext.RequiredOrgId, _sessionContext.RequiredUserId);
|
|
|
- await HandleStepAsync(currentStep, workflow, dto, null, cancellationToken);
|
|
|
+ var currentStep = GetUnHandleStep(workflow.Steps, _sessionContext.RequiredOrgId,
|
|
|
+ _sessionContext.RequiredUserId);
|
|
|
+ await HandleStepAsync(currentStep, workflow, dto, null, null, cancellationToken);
|
|
|
|
|
|
var endStepDefine = workflow.WorkflowDefinition.FindEndStepDefine();
|
|
|
- var endTrace = await EndAsync(workflow, dto, endStepDefine, currentStep, EReviewResult.Failed, cancellationToken);
|
|
|
+ var endTrace = await EndAsync(workflow, dto, endStepDefine, currentStep, EReviewResult.Failed,
|
|
|
+ cancellationToken);
|
|
|
|
|
|
//await _mediator.Publish(new RejectNotify(workflow, dto), cancellationToken);
|
|
|
}
|
|
@@ -659,7 +693,8 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
if (string.IsNullOrEmpty(stepCode)) throw new ArgumentNullException(nameof(stepCode));
|
|
|
var stepDefine = workflowDefinition.FindStepDefine(stepCode);
|
|
|
if (stepDefine == null)
|
|
|
- throw new UserFriendlyException($"未找到流程中对应的节点,DefineCode: {workflowDefinition.Code}, stepCode: {stepCode}",
|
|
|
+ throw new UserFriendlyException(
|
|
|
+ $"未找到流程中对应的节点,DefineCode: {workflowDefinition.Code}, stepCode: {stepCode}",
|
|
|
"未查询到对应节点");
|
|
|
return stepDefine;
|
|
|
}
|
|
@@ -674,7 +709,8 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
/// 查询待回访部门
|
|
|
/// </summary>
|
|
|
/// <returns></returns>
|
|
|
- public async Task<(Kv, IReadOnlyList<Kv>)> GetUnvisitOrgsAsync(string workflowId, CancellationToken cancellationToken)
|
|
|
+ public async Task<(Kv, IReadOnlyList<Kv>)> GetUnvisitOrgsAsync(string workflowId,
|
|
|
+ CancellationToken cancellationToken)
|
|
|
{
|
|
|
var workflow = await GetWorkflowAsync(workflowId, withSteps: true, cancellationToken: cancellationToken);
|
|
|
if (workflow.CounterSignType is not ECounterSignType.Center)
|
|
@@ -727,7 +763,8 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
var workflow = await GetWorkflowAsync(dto.WorkflowId, withDefine: true, withSteps: true,
|
|
|
cancellationToken: cancellationToken);
|
|
|
|
|
|
- var currentStep = GetUnHandleStep(workflow.Steps, _sessionContext.RequiredOrgId, _sessionContext.RequiredUserId);
|
|
|
+ var currentStep = GetUnHandleStep(workflow.Steps, _sessionContext.RequiredOrgId,
|
|
|
+ _sessionContext.RequiredUserId);
|
|
|
//var (currentStepBox, currentStep) = GetUnCompleteStep(workflow.Steps, _sessionContext.RequiredOrgId, _sessionContext.RequiredUserId);
|
|
|
|
|
|
var endStepDefine = workflow.WorkflowDefinition.FindEndStepDefine();
|
|
@@ -742,7 +779,8 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
/// <summary>
|
|
|
/// 更新期满时间
|
|
|
/// </summary>
|
|
|
- public async Task UpdateExpiredTimeAsync(Workflow workflow, DateTime expiredTime, string timelimit, int? timelimiteCount,
|
|
|
+ public async Task UpdateExpiredTimeAsync(Workflow workflow, DateTime expiredTime, string timelimit,
|
|
|
+ int? timelimiteCount,
|
|
|
ETimeType? timelimitUnit, CancellationToken cancellationToken)
|
|
|
{
|
|
|
workflow.ExpiredTime = expiredTime;
|
|
@@ -755,7 +793,8 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
/// <summary>
|
|
|
/// 新增流程流转记录
|
|
|
/// </summary>
|
|
|
- public async Task AddTracesAsync(string workflowId, List<WorkflowTrace> traces, CancellationToken cancellationToken)
|
|
|
+ public async Task AddTracesAsync(string workflowId, List<WorkflowTrace> traces,
|
|
|
+ CancellationToken cancellationToken)
|
|
|
{
|
|
|
var workflow = await GetWorkflowAsync(workflowId, cancellationToken: cancellationToken);
|
|
|
if (workflow is null)
|
|
@@ -767,7 +806,8 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
/// <summary>
|
|
|
/// 创建开始节点
|
|
|
/// </summary>
|
|
|
- public WorkflowStep CreateStartStep(Workflow workflow, StepDefine startStepDefine, BasicWorkflowDto dto, List<Kv> handles)
|
|
|
+ public WorkflowStep CreateStartStep(Workflow workflow, StepDefine startStepDefine, BasicWorkflowDto dto,
|
|
|
+ List<Kv> handles)
|
|
|
{
|
|
|
//startstep
|
|
|
var nextSteps = _mapper.Map<List<StepSimple>>(startStepDefine.NextSteps);
|
|
@@ -777,6 +817,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
if (selectedStep is not null)
|
|
|
selectedStep.Selected = true;
|
|
|
}
|
|
|
+
|
|
|
var startStep = _mapper.Map<WorkflowStep>(startStepDefine);
|
|
|
startStep.WorkflowId = workflow.Id;
|
|
|
startStep.Handlers = handles;
|
|
@@ -793,7 +834,8 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
|
|
|
#region private method
|
|
|
|
|
|
- public async Task<WorkflowStep> CreateStartStepAsync(Workflow workflow, StepDefine startStepDefine, BasicWorkflowDto dto,
|
|
|
+ public async Task<WorkflowStep> CreateStartStepAsync(Workflow workflow, StepDefine startStepDefine,
|
|
|
+ BasicWorkflowDto dto,
|
|
|
List<Kv> handles, EWorkflowTraceStatus traceStatus, CancellationToken cancellationToken)
|
|
|
{
|
|
|
var startStep = CreateStartStep(workflow, startStepDefine, dto, handles);
|
|
@@ -908,7 +950,8 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
{
|
|
|
var countersignId = prevStep.IsStartCountersign ? prevStep.StartCountersignId : prevStep.CountersignId;
|
|
|
|
|
|
- return CreateStepsAsync(workflow, stepDefine, prevStep, dto, flowAssignType, dto.NextHandlers, countersignId,
|
|
|
+ return CreateStepsAsync(workflow, stepDefine, prevStep, dto, flowAssignType, dto.NextHandlers,
|
|
|
+ countersignId,
|
|
|
EWorkflowStepStatus.WaitForAccept, prevStep.GetNextStepCountersignPosition(),
|
|
|
false, EWorkflowTraceStatus.Normal, cancellationToken);
|
|
|
}
|
|
@@ -957,7 +1000,8 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
//csEndStep.TimeLimit = GetTimeLimit("");
|
|
|
csEndStep.StepExpiredTime = expiredTime;
|
|
|
csEndStep.Handlers = countersignStartStep.Handlers
|
|
|
- .Where(d => d.Key == countersignStartStep.HandlerId || d.Key == countersignStartStep.HandlerOrgId).ToList();
|
|
|
+ .Where(d => d.Key == countersignStartStep.HandlerId || d.Key == countersignStartStep.HandlerOrgId)
|
|
|
+ .ToList();
|
|
|
|
|
|
csEndStep.Reset();
|
|
|
csEndStep.ResetParameters();
|
|
@@ -1008,7 +1052,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
/// 办理节点
|
|
|
/// </summary>
|
|
|
private async Task HandleStepAsync(WorkflowStep step, Workflow workflow, BasicWorkflowDto dto,
|
|
|
- ECounterSignType? counterSignType, CancellationToken cancellationToken)
|
|
|
+ EFlowAssignType? flowAssignType, ECounterSignType? counterSignType, CancellationToken cancellationToken)
|
|
|
{
|
|
|
if (step.Status is EWorkflowStepStatus.Handled)
|
|
|
throw UserFriendlyException.SameMessage("当前节点状态已办理");
|
|
@@ -1021,7 +1065,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
|
|
|
//创建会签数据
|
|
|
if (dto.IsStartCountersign)
|
|
|
- await StartCountersignAsync(workflow, step, dto, counterSignType.Value, cancellationToken);
|
|
|
+ await StartCountersignAsync(workflow, step, dto, flowAssignType, counterSignType, cancellationToken);
|
|
|
|
|
|
//办理参数
|
|
|
_mapper.Map(dto, step);
|
|
@@ -1030,6 +1074,23 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
HandleStep(step, dto.NextStepCode);
|
|
|
}
|
|
|
|
|
|
+ private bool CheckIsActualHandle(Workflow workflow, WorkflowStep step, StepDefine nextStepDefine,
|
|
|
+ BasicWorkflowDto dto)
|
|
|
+ {
|
|
|
+ //1. workflow是否为办理类型 2. 非会签:当前是否为普通节点and下一节点是否为汇总 or endStep 3. 会签:当前操作为汇总还是继续往下办理?thk: 汇总以后但未回到top又往下办理的场景,前面实际办理部门也算作办理部门
|
|
|
+ if (workflow.FlowType is not EFlowType.Handle) return false;
|
|
|
+
|
|
|
+ if (workflow.IsInCountersign)
|
|
|
+ {
|
|
|
+ return dto.BackToCountersignEnd;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ return step.StepType is EStepType.Normal &&
|
|
|
+ nextStepDefine.StepType is EStepType.Summary or EStepType.End;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// 办理节点(赋值节点的办理对象信息)
|
|
|
/// </summary>
|
|
@@ -1046,10 +1107,10 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
/// 开始会签(创建会签数据,更新currentStep会签数据)
|
|
|
/// </summary>
|
|
|
private async Task StartCountersignAsync(Workflow workflow, WorkflowStep startStep, BasicWorkflowDto dto,
|
|
|
- ECounterSignType counterSignType, CancellationToken cancellationToken)
|
|
|
+ EFlowAssignType? flowAssignType, ECounterSignType? counterSignType, CancellationToken cancellationToken)
|
|
|
{
|
|
|
var countersign = await CreateCountersignAsync(
|
|
|
- workflow.Id, startStep, dto.NextHandlers.Count,
|
|
|
+ workflow.Id, startStep, dto.NextHandlers, flowAssignType,
|
|
|
counterSignType, startStep.StepExpiredTime.Value,
|
|
|
startStep.CountersignId, cancellationToken);
|
|
|
startStep.StartCountersign(countersign.Id);
|
|
@@ -1139,9 +1200,8 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
}
|
|
|
|
|
|
private async Task<WorkflowCountersign> CreateCountersignAsync(
|
|
|
- string workflowId, WorkflowStep startStep, int memberCount,
|
|
|
- ECounterSignType counterSignType, DateTime stepExpiredTime,
|
|
|
- string? parentId = null,
|
|
|
+ string workflowId, WorkflowStep startStep, List<Kv> handlers, EFlowAssignType? flowAssignType,
|
|
|
+ ECounterSignType? counterSignType, DateTime stepExpiredTime, string? parentId = null,
|
|
|
CancellationToken cancellationToken = default)
|
|
|
{
|
|
|
var countersign = new WorkflowCountersign
|
|
@@ -1159,9 +1219,9 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
StarterOrgAreaName = _sessionContext.OrgAreaName,
|
|
|
|
|
|
ParentId = parentId,
|
|
|
- Members = memberCount,
|
|
|
+ Members = _mapper.Map<List<CountersignMember>>(handlers),
|
|
|
+ FlowAssignType = flowAssignType,
|
|
|
CounterSignType = counterSignType,
|
|
|
- StartExpiredTime = stepExpiredTime,
|
|
|
};
|
|
|
await _workflowCountersignRepository.AddAsync(countersign, cancellationToken);
|
|
|
return countersign;
|
|
@@ -1209,7 +1269,8 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private async Task<WorkflowTrace> PreviousTraceAsync(string workflowId, PreviousWorkflowDto dto, WorkflowStep step,
|
|
|
+ private async Task<WorkflowTrace> PreviousTraceAsync(string workflowId, PreviousWorkflowDto dto,
|
|
|
+ WorkflowStep step,
|
|
|
CancellationToken cancellationToken)
|
|
|
{
|
|
|
var trace = await GetWorkflowTraceAsync(workflowId, step.Id, cancellationToken);
|
|
@@ -1247,7 +1308,8 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
}
|
|
|
|
|
|
private async Task CreateTraceAsync(Workflow workflow, WorkflowStep step,
|
|
|
- EWorkflowTraceStatus traceStatus = EWorkflowTraceStatus.Normal, CancellationToken cancellationToken = default)
|
|
|
+ EWorkflowTraceStatus traceStatus = EWorkflowTraceStatus.Normal,
|
|
|
+ CancellationToken cancellationToken = default)
|
|
|
{
|
|
|
var trace = _mapper.Map<WorkflowTrace>(step);
|
|
|
trace.Status = traceStatus;
|
|
@@ -1317,9 +1379,12 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
workflow.SetStatusRunnable();
|
|
|
|
|
|
var targetStepNew = targetIsStartStep
|
|
|
- ? await CreateStartStepAsync(workflow, targetStepDefine, dto, dto.NextHandlers, traceStatus, cancellationToken)
|
|
|
- : (await CreateStepsAsync(workflow, targetStepDefine, targetPrevStep, dto, flowAssignInfo.FlowAssignType, dto.NextHandlers,
|
|
|
- null, EWorkflowStepStatus.WaitForAccept, ECountersignPosition.None, true, traceStatus, cancellationToken)).First();
|
|
|
+ ? await CreateStartStepAsync(workflow, targetStepDefine, dto, dto.NextHandlers, traceStatus,
|
|
|
+ cancellationToken)
|
|
|
+ : (await CreateStepsAsync(workflow, targetStepDefine, targetPrevStep, dto,
|
|
|
+ flowAssignInfo.FlowAssignType, dto.NextHandlers,
|
|
|
+ null, EWorkflowStepStatus.WaitForAccept, ECountersignPosition.None, true, traceStatus,
|
|
|
+ cancellationToken)).First();
|
|
|
|
|
|
|
|
|
//更新当前办理节点信息
|
|
@@ -1415,7 +1480,8 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
}
|
|
|
|
|
|
return await CreateStepsAsync(workflow, stepDefine, prevStep, dto, flowAssignInfo.FlowAssignType, handlers,
|
|
|
- null, EWorkflowStepStatus.WaitForAccept, ECountersignPosition.None, true, traceStatus, cancellationToken);
|
|
|
+ null, EWorkflowStepStatus.WaitForAccept, ECountersignPosition.None, true, traceStatus,
|
|
|
+ cancellationToken);
|
|
|
}
|
|
|
|
|
|
private async Task<List<WorkflowStep>> CreateStepsAsync(
|