|
@@ -82,17 +82,21 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
{
|
|
|
//var nextStepBoxDefine = GetStepBoxDefine(workflow.Definition, dto.NextStepCode);
|
|
|
|
|
|
- var isStartCountersign = nextStepBoxDefine.IsStartCountersign(dto.Handlers.Count);
|
|
|
+ var isStartCountersign = nextStepBoxDefine.IsStartCountersign(dto.NextHandlers.Count);
|
|
|
//检查是否支持会签
|
|
|
if (isStartCountersign && nextStepBoxDefine.CountersignMode == ECountersignMode.UnSupport)
|
|
|
throw new UserFriendlyException($"当前节点不支持会签, defineCode: {workflow.Definition.Code}", "当前节点不支持会签");
|
|
|
|
|
|
//1. 如果不是按角色指派,handlers必填 2. 如果按角色指派,handlers可以不选
|
|
|
- if (nextStepBoxDefine.HandlerType is not EHandlerType.Role && !dto.Handlers.Any())
|
|
|
+ if (nextStepBoxDefine.HandlerType is not EHandlerType.Role && !dto.NextHandlers.Any())
|
|
|
throw UserFriendlyException.SameMessage("未指派办理人");
|
|
|
|
|
|
//第二节点的previousId is string.Empty
|
|
|
- await CreateStepAsync(workflow, nextStepBoxDefine, dto, cancellationToken: cancellationToken);
|
|
|
+ var nextStepBox = await CreateStepAsync(workflow, nextStepBoxDefine, dto, cancellationToken: cancellationToken);
|
|
|
+
|
|
|
+ //更新当前节点名称、时间、会签节点code 等字段
|
|
|
+ workflow.SetWorkflowCurrentStepInfo(isStartCountersign, nextStepBox);
|
|
|
+ await _workflowRepository.UpdateAsync(workflow, cancellationToken);
|
|
|
|
|
|
//publish
|
|
|
_mediator.Publish(new StartWorkflowNotify(workflow, nextStepBoxDefine, dto, isStartCountersign), cancellationToken);
|
|
@@ -437,7 +441,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
{
|
|
|
//更新当前节点名称、时间、会签节点code
|
|
|
workflow.CloseCountersignStatus();
|
|
|
- var isCountersign = dto.Handlers.Count > 1;
|
|
|
+ var isCountersign = dto.NextHandlers.Count > 1;
|
|
|
workflow.SetWorkflowCurrentStepInfo(isCountersign, stepBox);
|
|
|
await _workflowRepository.UpdateAsync(workflow, cancellationToken);
|
|
|
}
|
|
@@ -636,7 +640,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
var stepBox = workflow.StepBoxes.FirstOrDefault(d => d.Code == stepBoxDefine.Code);
|
|
|
if (stepBox == null)
|
|
|
{
|
|
|
- stepBox = CreateStepBox(stepBoxDefine, dto, prevStepBox?.Id ?? string.Empty);
|
|
|
+ stepBox = CreateStepBox(workflow.Id, stepBoxDefine, dto, prevStepBox?.Id ?? string.Empty);
|
|
|
await _workflowStepRepository.AddAsync(stepBox, cancellationToken);
|
|
|
}
|
|
|
|
|
@@ -703,9 +707,9 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- if (!dto.Handlers.Any())
|
|
|
+ if (stepBoxDefine.HandlerType != EHandlerType.Role && !dto.NextHandlers.Any())
|
|
|
throw new UserFriendlyException("未指定节点处理者");
|
|
|
- var subSteps = CreateSubSteps(stepBox, dto.Handlers, dto.NextMainHandler,
|
|
|
+ var subSteps = CreateSubSteps(stepBox, dto.NextHandlers, dto.NextMainHandler,
|
|
|
prevStepId, prevCountersignId, topCountersignId, stepStatus);
|
|
|
stepBox.Steps.AddRange(subSteps);
|
|
|
await _workflowStepRepository.AddRangeAsync(subSteps, cancellationToken);
|
|
@@ -759,10 +763,11 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
return new();
|
|
|
}
|
|
|
|
|
|
- private WorkflowStep CreateStepBox(StepDefine stepBasic, BasicWorkflowDto dto, string prevStepBoxId)
|
|
|
+ private WorkflowStep CreateStepBox(string workflowId, StepDefine stepBasic, BasicWorkflowDto dto, string prevStepBoxId)
|
|
|
{
|
|
|
var stepBox = _mapper.Map<WorkflowStep>(stepBasic);
|
|
|
_mapper.Map(dto, stepBox);
|
|
|
+ stepBox.WorkflowId = workflowId;
|
|
|
stepBox.PreviousId = prevStepBoxId;
|
|
|
return stepBox;
|
|
|
}
|
|
@@ -776,18 +781,21 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
string? topCountersignId,
|
|
|
EWorkflowStepStatus stepStatus)
|
|
|
{
|
|
|
- return nextHandlers.Select(d =>
|
|
|
- {
|
|
|
- var step = _mapper.Map<WorkflowStep>(stepBox);
|
|
|
- step.ParentId = stepBox.Id;
|
|
|
- step.HandlerId = d.Id;
|
|
|
- step.IsMain = d.Id == nextMainHandler;
|
|
|
- step.PreviousId = prevStepId;
|
|
|
- step.PrevCountersignId = prevCountersignId;
|
|
|
- step.TopCountersignId = topCountersignId;
|
|
|
- step.Status = stepStatus;
|
|
|
- return step;
|
|
|
- }).ToList();
|
|
|
+ var steps = new List<WorkflowStep>();
|
|
|
+ foreach (var nextHandler in nextHandlers)
|
|
|
+ {
|
|
|
+ var step = _mapper.Map<WorkflowStep>(stepBox);
|
|
|
+ step.ParentId = stepBox.Id;
|
|
|
+ step.HandlerId = nextHandler.Id;
|
|
|
+ step.IsMain = nextHandler.Id == nextMainHandler;
|
|
|
+ step.PreviousId = prevStepId;
|
|
|
+ step.PrevCountersignId = prevCountersignId;
|
|
|
+ step.TopCountersignId = topCountersignId;
|
|
|
+ step.Status = stepStatus;
|
|
|
+ steps.Add(step);
|
|
|
+ }
|
|
|
+
|
|
|
+ return steps;
|
|
|
}
|
|
|
|
|
|
/// <summary>
|