|
@@ -7,9 +7,7 @@ using Hotline.Settings;
|
|
using Hotline.Share.Dtos;
|
|
using Hotline.Share.Dtos;
|
|
using Hotline.Share.Dtos.FlowEngine;
|
|
using Hotline.Share.Dtos.FlowEngine;
|
|
using Hotline.Share.Dtos.FlowEngine.Definition;
|
|
using Hotline.Share.Dtos.FlowEngine.Definition;
|
|
-using Hotline.Share.Dtos.FlowEngine.Workflow;
|
|
|
|
using Hotline.Share.Enums.FlowEngine;
|
|
using Hotline.Share.Enums.FlowEngine;
|
|
-using Hotline.Share.Enums.Settings;
|
|
|
|
using Hotline.Users;
|
|
using Hotline.Users;
|
|
using MapsterMapper;
|
|
using MapsterMapper;
|
|
using MediatR;
|
|
using MediatR;
|
|
@@ -287,7 +285,8 @@ namespace Hotline.FlowEngine.Workflows
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- var unCompletedCountersign = workflow.Countersigns.FirstOrDefault(d => !d.IsCompleted() && d.StarterId == userId);
|
|
|
|
|
|
+ var unCompletedCountersign = workflow.Countersigns
|
|
|
|
+ .FirstOrDefault(d => !d.IsCompleted() && d.StarterId == userId);
|
|
if (unCompletedCountersign is null) return (workflow, null, canPrevious);
|
|
if (unCompletedCountersign is null) return (workflow, null, canPrevious);
|
|
|
|
|
|
//var existCountersignEndStep = workflow.Steps.Exists(d =>
|
|
//var existCountersignEndStep = workflow.Steps.Exists(d =>
|
|
@@ -491,13 +490,13 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
|
|
|
//创建下一/N个节点(会签汇总节点:会签未全部办理时不创建,最后一个会签办理节点创建会签汇总节点)
|
|
//创建下一/N个节点(会签汇总节点:会签未全部办理时不创建,最后一个会签办理节点创建会签汇总节点)
|
|
var nextSteps = await CreateNextStepsAsync(workflow, currentStep, dto, nextStepDefine, isNextDynamic,
|
|
var nextSteps = await CreateNextStepsAsync(workflow, currentStep, dto, nextStepDefine, isNextDynamic,
|
|
- flowAssignInfo, expiredTime, cancellationToken);
|
|
|
|
|
|
+ flowAssignInfo, expiredTime, cancellationToken);
|
|
|
|
|
|
//赋值当前节点的下级办理节点
|
|
//赋值当前节点的下级办理节点
|
|
if (dto.IsStartCountersign
|
|
if (dto.IsStartCountersign
|
|
//|| (currentStep.IsInCountersign() &&
|
|
//|| (currentStep.IsInCountersign() &&
|
|
// !currentStep.IsTopCountersignEndStep(workflow.TopCountersignStepId))
|
|
// !currentStep.IsTopCountersignEndStep(workflow.TopCountersignStepId))
|
|
- )
|
|
|
|
|
|
+ )
|
|
{
|
|
{
|
|
currentStep.CreateCountersignSteps(nextSteps);
|
|
currentStep.CreateCountersignSteps(nextSteps);
|
|
await _workflowStepRepository.UpdateAsync(currentStep, cancellationToken);
|
|
await _workflowStepRepository.UpdateAsync(currentStep, cancellationToken);
|
|
@@ -551,63 +550,25 @@ namespace Hotline.FlowEngine.Workflows
|
|
/// 退回(返回前一节点)
|
|
/// 退回(返回前一节点)
|
|
/// </summary>
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
/// <returns></returns>
|
|
- public async Task PreviousAsync(Workflow workflow, PreviousWorkflowDto dto, User operater, CancellationToken cancellationToken)
|
|
|
|
|
|
+ public async Task PreviousAsync(Workflow workflow, PreviousWorkflowDto dto, User operater,
|
|
|
|
+ CancellationToken cancellationToken)
|
|
{
|
|
{
|
|
ValidatePermission(workflow, operater.OrgId, operater.Id);
|
|
ValidatePermission(workflow, operater.OrgId, operater.Id);
|
|
- //CheckWhetherRunnable(workflow.Status);
|
|
|
|
- //if (workflow.IsInCountersign)
|
|
|
|
- // throw UserFriendlyException.SameMessage("会签流程不支持退回");
|
|
|
|
|
|
|
|
- var currentStep = GetUnHandleStep(workflow.Steps, operater.OrgId, operater.Id);
|
|
|
|
- var isCurrentTopCountersignEndStep = workflow.IsInCountersign && currentStep.IsTopCountersignEndStep(workflow.TopCountersignStepId);
|
|
|
|
- if (currentStep.IsInCountersign() && !isCurrentTopCountersignEndStep)
|
|
|
|
- throw UserFriendlyException.SameMessage("会签节点不支持退回");
|
|
|
|
|
|
+ var (currentStep, prevStep, countersignStartStep) = GetPreviousStep(workflow, operater.Id, operater.OrgId);
|
|
|
|
|
|
//保存附件
|
|
//保存附件
|
|
if (dto.Files.Any())
|
|
if (dto.Files.Any())
|
|
- currentStep.FileJson = await _fileRepository.AddFileAsync(dto.Files, workflow.ExternalId, currentStep.Id, cancellationToken);
|
|
|
|
-
|
|
|
|
- if (workflow.FlowType is EFlowType.Review && currentStep.StepType is EStepType.Start && currentStep.IsOrigin)
|
|
|
|
- throw UserFriendlyException.SameMessage("当前流程已退回到开始节点");
|
|
|
|
-
|
|
|
|
- //当退回操作遇到会签时,删除所有会签节点直达topCsStep
|
|
|
|
- var shouldCountersignEnd = false;
|
|
|
|
- //find prevStep, update handler
|
|
|
|
- WorkflowStep? prevStep, countersignStartStep = null;
|
|
|
|
- if (isCurrentTopCountersignEndStep)
|
|
|
|
- {
|
|
|
|
- //prev is topstart's prev
|
|
|
|
- countersignStartStep = workflow.Steps.FirstOrDefault(d => d.Id == currentStep.CountersignStartStepId);
|
|
|
|
- if (countersignStartStep is null)
|
|
|
|
- throw new UserFriendlyException("未查询到对应会签开始节点");
|
|
|
|
- prevStep = workflow.Steps.FirstOrDefault(d => d.Id == countersignStartStep.PrevStepId);
|
|
|
|
- shouldCountersignEnd = true;
|
|
|
|
- }
|
|
|
|
- else
|
|
|
|
- {
|
|
|
|
- prevStep = workflow.Steps.FirstOrDefault(d => d.Id == currentStep.PrevStepId);
|
|
|
|
- }
|
|
|
|
- if (prevStep == null)
|
|
|
|
- throw UserFriendlyException.SameMessage("未查询到前一节点");
|
|
|
|
-
|
|
|
|
- if (workflow.IsInCountersign && prevStep.IsTopCountersignEndStep(workflow.TopCountersignStepId))
|
|
|
|
- {
|
|
|
|
- countersignStartStep = workflow.Steps.FirstOrDefault(d => d.Id == prevStep.CountersignStartStepId);
|
|
|
|
- if (countersignStartStep is null)
|
|
|
|
- throw new UserFriendlyException("未查询到对应会签开始节点");
|
|
|
|
- prevStep = workflow.Steps.FirstOrDefault(d => d.Id == prevStep.CountersignStartStepId);
|
|
|
|
- shouldCountersignEnd = true;
|
|
|
|
- }
|
|
|
|
- if (prevStep == null)
|
|
|
|
- throw UserFriendlyException.SameMessage("未查询到会签发起节点");
|
|
|
|
|
|
+ currentStep.FileJson = await _fileRepository.AddFileAsync(
|
|
|
|
+ dto.Files, workflow.ExternalId, currentStep.Id, cancellationToken);
|
|
|
|
|
|
// add prev current to remove list
|
|
// add prev current to remove list
|
|
var removeSteps = new List<WorkflowStep> { currentStep, prevStep };
|
|
var removeSteps = new List<WorkflowStep> { currentStep, prevStep };
|
|
|
|
|
|
- if (shouldCountersignEnd)
|
|
|
|
|
|
+ if (countersignStartStep is not null)
|
|
{
|
|
{
|
|
//add cs steps to remove list
|
|
//add cs steps to remove list
|
|
- SearchCountersignSteps(countersignStartStep!, workflow.Steps, ref removeSteps);
|
|
|
|
|
|
+ SearchCountersignSteps(countersignStartStep, workflow.Steps, ref removeSteps);
|
|
|
|
|
|
//end cs
|
|
//end cs
|
|
var currentCountersign =
|
|
var currentCountersign =
|
|
@@ -638,7 +599,8 @@ namespace Hotline.FlowEngine.Workflows
|
|
var trace = await PreviousTraceAsync(workflow.Id, dto, currentStep, cancellationToken);
|
|
var trace = await PreviousTraceAsync(workflow.Id, dto, currentStep, cancellationToken);
|
|
|
|
|
|
//复制上一个节点为待接办
|
|
//复制上一个节点为待接办
|
|
- var newPrevStep = await DuplicateStepWithTraceAsync(workflow, prevStep, EWorkflowTraceStatus.Previous, cancellationToken);
|
|
|
|
|
|
+ var newPrevStep =
|
|
|
|
+ await DuplicateStepWithTraceAsync(workflow, prevStep, EWorkflowTraceStatus.Previous, cancellationToken);
|
|
|
|
|
|
//remove workflow.steps
|
|
//remove workflow.steps
|
|
await _workflowStepRepository.RemoveRangeAsync(removeSteps, cancellationToken);
|
|
await _workflowStepRepository.RemoveRangeAsync(removeSteps, cancellationToken);
|
|
@@ -660,6 +622,50 @@ namespace Hotline.FlowEngine.Workflows
|
|
await _mediator.Publish(new PreviousNotify(workflow, newPrevStep, dto, isOrgToCenter), cancellationToken);
|
|
await _mediator.Publish(new PreviousNotify(workflow, newPrevStep, dto, isOrgToCenter), cancellationToken);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /// <summary>
|
|
|
|
+ /// 查询退回节点信息
|
|
|
|
+ /// </summary>
|
|
|
|
+ public (WorkflowStep currentStep, WorkflowStep prevStep, WorkflowStep? countersignStartStep) GetPreviousStep(
|
|
|
|
+ Workflow workflow, string operaterId, string operaterOrgId)
|
|
|
|
+ {
|
|
|
|
+ var currentStep = GetUnHandleStep(workflow.Steps, operaterOrgId, operaterId);
|
|
|
|
+ var isCurrentTopCountersignEndStep = workflow.IsInCountersign &&
|
|
|
|
+ currentStep.IsTopCountersignEndStep(workflow.TopCountersignStepId);
|
|
|
|
+ if (currentStep.IsInCountersign() && !isCurrentTopCountersignEndStep)
|
|
|
|
+ throw UserFriendlyException.SameMessage("会签节点不支持退回");
|
|
|
|
+
|
|
|
|
+ if (workflow.FlowType is EFlowType.Review && currentStep.StepType is EStepType.Start && currentStep.IsOrigin)
|
|
|
|
+ throw UserFriendlyException.SameMessage("当前流程已退回到开始节点");
|
|
|
|
+
|
|
|
|
+ //当退回操作遇到会签时,删除所有会签节点直达topCsStep
|
|
|
|
+ //find prevStep, update handler
|
|
|
|
+ WorkflowStep? prevStep, countersignStartStep = null;
|
|
|
|
+ if (isCurrentTopCountersignEndStep)
|
|
|
|
+ {
|
|
|
|
+ //prev is topstart's prev
|
|
|
|
+ countersignStartStep = workflow.Steps.FirstOrDefault(d => d.Id == currentStep.CountersignStartStepId);
|
|
|
|
+ if (countersignStartStep is null)
|
|
|
|
+ throw new UserFriendlyException("未查询到对应会签开始节点");
|
|
|
|
+ prevStep = workflow.Steps.FirstOrDefault(d => d.Id == countersignStartStep.PrevStepId);
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ prevStep = workflow.Steps.FirstOrDefault(d => d.Id == currentStep.PrevStepId);
|
|
|
|
+ }
|
|
|
|
+ if (prevStep == null)
|
|
|
|
+ throw UserFriendlyException.SameMessage("未查询到前一节点");
|
|
|
|
+
|
|
|
|
+ if (prevStep.IsCountersignEndStep)
|
|
|
|
+ {
|
|
|
|
+ countersignStartStep = workflow.Steps.FirstOrDefault(d => d.Id == prevStep.CountersignStartStepId);
|
|
|
|
+ prevStep = countersignStartStep ?? throw new UserFriendlyException("未查询到对应会签开始节点");
|
|
|
|
+ if (prevStep == null)
|
|
|
|
+ throw UserFriendlyException.SameMessage("未查询到前一节点");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return (currentStep, prevStep, countersignStartStep);
|
|
|
|
+ }
|
|
|
|
+
|
|
/// <summary>
|
|
/// <summary>
|
|
/// 查找当前会签内所有节点(含start,end)
|
|
/// 查找当前会签内所有节点(含start,end)
|
|
/// </summary>
|
|
/// </summary>
|
|
@@ -676,6 +682,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+
|
|
csSteps.Add(startStep);
|
|
csSteps.Add(startStep);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -722,7 +729,8 @@ namespace Hotline.FlowEngine.Workflows
|
|
if (workflow.Status is EWorkflowStatus.Completed)
|
|
if (workflow.Status is EWorkflowStatus.Completed)
|
|
workflow.SetStatusRunnable();
|
|
workflow.SetStatusRunnable();
|
|
|
|
|
|
- var newStartStep = await DuplicateStepWithTraceAsync(workflow, startStep, EWorkflowTraceStatus.Recall, cancellationToken);
|
|
|
|
|
|
+ var newStartStep =
|
|
|
|
+ await DuplicateStepWithTraceAsync(workflow, startStep, EWorkflowTraceStatus.Recall, cancellationToken);
|
|
|
|
|
|
//更新当前办理节点信息
|
|
//更新当前办理节点信息
|
|
//workflow.UpdateWorkflowCurrentStepInfo(false,
|
|
//workflow.UpdateWorkflowCurrentStepInfo(false,
|
|
@@ -868,10 +876,10 @@ namespace Hotline.FlowEngine.Workflows
|
|
await _workflowStepRepository.UpdateAsync(currentStep, cancellationToken);
|
|
await _workflowStepRepository.UpdateAsync(currentStep, cancellationToken);
|
|
|
|
|
|
workflow.UpdateActualStepWhenHandle(currentStep,
|
|
workflow.UpdateActualStepWhenHandle(currentStep,
|
|
- _sessionContext.RequiredUserId, _sessionContext.UserName,
|
|
|
|
- _sessionContext.RequiredOrgId, _sessionContext.OrgName,
|
|
|
|
- _sessionContext.OrgAreaCode, _sessionContext.OrgAreaName,
|
|
|
|
- _sessionContext.OrgLevel);
|
|
|
|
|
|
+ _sessionContext.RequiredUserId, _sessionContext.UserName,
|
|
|
|
+ _sessionContext.RequiredOrgId, _sessionContext.OrgName,
|
|
|
|
+ _sessionContext.OrgAreaCode, _sessionContext.OrgAreaName,
|
|
|
|
+ _sessionContext.OrgLevel);
|
|
|
|
|
|
var endStepDefine = workflow.WorkflowDefinition.FindEndStepDefine();
|
|
var endStepDefine = workflow.WorkflowDefinition.FindEndStepDefine();
|
|
var endTrace = await EndAsync(workflow, dto, endStepDefine, currentStep, EReviewResult.Failed,
|
|
var endTrace = await EndAsync(workflow, dto, endStepDefine, currentStep, EReviewResult.Failed,
|
|
@@ -1135,7 +1143,8 @@ namespace Hotline.FlowEngine.Workflows
|
|
if (csStartStep is null)
|
|
if (csStartStep is null)
|
|
throw new UserFriendlyException("未查询到会签节点");
|
|
throw new UserFriendlyException("未查询到会签节点");
|
|
|
|
|
|
- nextSteps = await CreateCsEndStepsByPrevStepAsync(workflow, csStartStep, dto, expiredTime, cancellationToken);
|
|
|
|
|
|
+ nextSteps = await CreateCsEndStepsByPrevStepAsync(workflow, csStartStep, dto, expiredTime,
|
|
|
|
+ cancellationToken);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
else
|
|
@@ -1143,7 +1152,8 @@ namespace Hotline.FlowEngine.Workflows
|
|
if (dto.BackToCountersignEnd)
|
|
if (dto.BackToCountersignEnd)
|
|
{
|
|
{
|
|
//todo check if cs all complete, create next
|
|
//todo check if cs all complete, create next
|
|
- nextSteps = await CreateCsEndStepsByPrevStepAsync(workflow, currentStep, dto, expiredTime, cancellationToken);
|
|
|
|
|
|
+ nextSteps = await CreateCsEndStepsByPrevStepAsync(workflow, currentStep, dto, expiredTime,
|
|
|
|
+ cancellationToken);
|
|
}
|
|
}
|
|
else
|
|
else
|
|
{
|
|
{
|
|
@@ -1385,7 +1395,8 @@ namespace Hotline.FlowEngine.Workflows
|
|
/// 开始会签(创建会签数据,更新currentStep会签数据)
|
|
/// 开始会签(创建会签数据,更新currentStep会签数据)
|
|
/// </summary>
|
|
/// </summary>
|
|
private async Task StartCountersignAsync(Workflow workflow, WorkflowStep startStep, BasicWorkflowDto dto,
|
|
private async Task StartCountersignAsync(Workflow workflow, WorkflowStep startStep, BasicWorkflowDto dto,
|
|
- EFlowAssignType? flowAssignType, ECounterSignType? counterSignType, DateTime? expiredTime, CancellationToken cancellationToken)
|
|
|
|
|
|
+ EFlowAssignType? flowAssignType, ECounterSignType? counterSignType, DateTime? expiredTime,
|
|
|
|
+ CancellationToken cancellationToken)
|
|
{
|
|
{
|
|
var countersign = await CreateCountersignAsync(
|
|
var countersign = await CreateCountersignAsync(
|
|
workflow, startStep, dto.NextHandlers, flowAssignType,
|
|
workflow, startStep, dto.NextHandlers, flowAssignType,
|
|
@@ -1671,7 +1682,8 @@ namespace Hotline.FlowEngine.Workflows
|
|
workflow.SetStatusRunnable();
|
|
workflow.SetStatusRunnable();
|
|
|
|
|
|
var targetStepNew = targetIsStartStep
|
|
var targetStepNew = targetIsStartStep
|
|
- ? await CreateStartStepAsync(workflow, targetStepDefine, dto, dto.NextHandlers, traceStatus, expiredTime, cancellationToken)
|
|
|
|
|
|
+ ? await CreateStartStepAsync(workflow, targetStepDefine, dto, dto.NextHandlers, traceStatus, expiredTime,
|
|
|
|
+ cancellationToken)
|
|
: (await CreateStepsAsync(workflow, targetStepDefine, targetPrevStep, dto,
|
|
: (await CreateStepsAsync(workflow, targetStepDefine, targetPrevStep, dto,
|
|
flowAssignInfo.FlowAssignType, dto.NextHandlers,
|
|
flowAssignInfo.FlowAssignType, dto.NextHandlers,
|
|
null, EWorkflowStepStatus.WaitForAccept, ECountersignPosition.None, true, traceStatus,
|
|
null, EWorkflowStepStatus.WaitForAccept, ECountersignPosition.None, true, traceStatus,
|
|
@@ -1857,7 +1869,8 @@ namespace Hotline.FlowEngine.Workflows
|
|
/// <param name="orgId">当前办理人orgId</param>
|
|
/// <param name="orgId">当前办理人orgId</param>
|
|
/// <param name="cancellationToken"></param>
|
|
/// <param name="cancellationToken"></param>
|
|
/// <returns></returns>
|
|
/// <returns></returns>
|
|
- public async Task<bool> CheckCurrentIsStartStepAsync(string workflowId, string userId, string orgId, CancellationToken cancellationToken)
|
|
|
|
|
|
+ public async Task<bool> CheckCurrentIsStartStepAsync(string workflowId, string userId, string orgId,
|
|
|
|
+ CancellationToken cancellationToken)
|
|
{
|
|
{
|
|
var workflow = await GetWorkflowAsync(workflowId, withSteps: true, cancellationToken: cancellationToken);
|
|
var workflow = await GetWorkflowAsync(workflowId, withSteps: true, cancellationToken: cancellationToken);
|
|
var currentStep = GetStep(workflow.Steps, orgId, userId, d => d != EWorkflowStepStatus.Handled);
|
|
var currentStep = GetStep(workflow.Steps, orgId, userId, d => d != EWorkflowStepStatus.Handled);
|
|
@@ -1920,7 +1933,8 @@ namespace Hotline.FlowEngine.Workflows
|
|
throw new UserFriendlyException("该会签已汇总");
|
|
throw new UserFriendlyException("该会签已汇总");
|
|
|
|
|
|
var updateCountersigns = new List<WorkflowCountersign>();
|
|
var updateCountersigns = new List<WorkflowCountersign>();
|
|
- EndCountersignWithCascade(countersign, workflow.Countersigns, startCountersignStep.BusinessType, ref updateCountersigns);
|
|
|
|
|
|
+ EndCountersignWithCascade(countersign, workflow.Countersigns, startCountersignStep.BusinessType,
|
|
|
|
+ ref updateCountersigns);
|
|
|
|
|
|
if (updateCountersigns.Any())
|
|
if (updateCountersigns.Any())
|
|
{
|
|
{
|
|
@@ -1937,11 +1951,13 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
|
|
|
//cp会签发起节点变为待办节点
|
|
//cp会签发起节点变为待办节点
|
|
//1. create terminal trace 2. 撤回至startStep
|
|
//1. create terminal trace 2. 撤回至startStep
|
|
- var newStep = await DuplicateStepWithTraceAsync(workflow, startCountersignStep, EWorkflowTraceStatus.Normal, cancellationToken);
|
|
|
|
|
|
+ var newStep = await DuplicateStepWithTraceAsync(workflow, startCountersignStep, EWorkflowTraceStatus.Normal,
|
|
|
|
+ cancellationToken);
|
|
|
|
|
|
//当topcsStep结束cs时,实际办理节点应该更新为newStep
|
|
//当topcsStep结束cs时,实际办理节点应该更新为newStep
|
|
if (startCountersignStep.Id == workflow.TopCountersignStepId)
|
|
if (startCountersignStep.Id == workflow.TopCountersignStepId)
|
|
- workflow.UpdateActualStepWhenAssign(newStep, startCountersignStep.HandlerOrgName, startCountersignStep.HandlerOrgId);
|
|
|
|
|
|
+ workflow.UpdateActualStepWhenAssign(newStep, startCountersignStep.HandlerOrgName,
|
|
|
|
+ startCountersignStep.HandlerOrgId);
|
|
|
|
|
|
//csEndStep又开启了cs,在结束会签时,如果该节点是topcs的end节点, workflow.topcsStep应该更新为前一cs开启stepId
|
|
//csEndStep又开启了cs,在结束会签时,如果该节点是topcs的end节点, workflow.topcsStep应该更新为前一cs开启stepId
|
|
if (startCountersignStep.IsTopCountersignEndStep(workflow.TopCountersignStepId))
|
|
if (startCountersignStep.IsTopCountersignEndStep(workflow.TopCountersignStepId))
|
|
@@ -1961,7 +1977,6 @@ namespace Hotline.FlowEngine.Workflows
|
|
workflow.UpdateHandlers(removeHandlers, newStep.FlowAssignType.Value, handlerObjs);
|
|
workflow.UpdateHandlers(removeHandlers, newStep.FlowAssignType.Value, handlerObjs);
|
|
|
|
|
|
await _workflowRepository.UpdateAsync(workflow, cancellationToken);
|
|
await _workflowRepository.UpdateAsync(workflow, cancellationToken);
|
|
-
|
|
|
|
}
|
|
}
|
|
|
|
|
|
return workflow;
|
|
return workflow;
|
|
@@ -1981,6 +1996,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+
|
|
EndStepByTerminalCs(step, traces, ref updateSteps, ref updateTraces);
|
|
EndStepByTerminalCs(step, traces, ref updateSteps, ref updateTraces);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -2002,6 +2018,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
_sessionContext.OrgAreaCode, _sessionContext.OrgAreaName,
|
|
_sessionContext.OrgAreaCode, _sessionContext.OrgAreaName,
|
|
_sessionContext.OrgIsCenter, opinion);
|
|
_sessionContext.OrgIsCenter, opinion);
|
|
}
|
|
}
|
|
|
|
+
|
|
updateSteps.Add(step);
|
|
updateSteps.Add(step);
|
|
|
|
|
|
if (isHandled) return;
|
|
if (isHandled) return;
|
|
@@ -2081,7 +2098,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
DateTime? expiredTime,
|
|
DateTime? expiredTime,
|
|
string stepName,
|
|
string stepName,
|
|
bool isOrigin,
|
|
bool isOrigin,
|
|
- EHandlerType? handlerType = null//动态节点依据动态策略判断
|
|
|
|
|
|
+ EHandlerType? handlerType = null //动态节点依据动态策略判断
|
|
)
|
|
)
|
|
{
|
|
{
|
|
if (!handlers.Any())
|
|
if (!handlers.Any())
|