|
@@ -47,7 +47,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
_mediator = mediator;
|
|
|
}
|
|
|
|
|
|
- public async Task<Workflow> CreateWorkflowAsync(Definition definition, string title, string externalId, CancellationToken cancellationToken)
|
|
|
+ public async Task<Workflow> CreateWorkflowAsync(Definition definition, string title, CancellationToken cancellationToken)
|
|
|
{
|
|
|
var workflow = new Workflow
|
|
|
{
|
|
@@ -59,7 +59,6 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
Status = EWorkflowStatus.Runnable,
|
|
|
TimeLimit = GetTimeLimit(definition.Code),
|
|
|
ExpiredTime = GenerateExpiredTime(definition.Code),
|
|
|
- ExternalId = externalId,
|
|
|
StepBoxes = new(),
|
|
|
Traces = new(),
|
|
|
Definition = definition
|
|
@@ -106,15 +105,36 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
CancellationToken cancellationToken = default)
|
|
|
{
|
|
|
var query = _workflowRepository.Queryable().Where(d => d.Id == workflowId);
|
|
|
- return await GetWorkflowAsync(query, withDefine, withSteps, withTraces, withSupplements, withAssigns);
|
|
|
- }
|
|
|
+ if (withDefine)
|
|
|
+ query = query.Includes(d => d.Definition);
|
|
|
+ if (withSupplements)
|
|
|
+ query = query.Includes(d => d.Supplements);
|
|
|
+ if (withAssigns)
|
|
|
+ query = query.Includes(d => d.Assigns);
|
|
|
|
|
|
- public async Task<Workflow> GetWorkflowAsync(string moduleCode, string externalId, bool withDefine = false, bool withSteps = false,
|
|
|
- bool withTraces = false, bool withSupplements = false, bool withAssigns = false,
|
|
|
- CancellationToken cancellationToken = default)
|
|
|
- {
|
|
|
- var query = _workflowRepository.Queryable().Where(d => d.ModuleCode == moduleCode && d.ExternalId == externalId);
|
|
|
- return await GetWorkflowAsync(query, withDefine, withSteps, withTraces, withSupplements, withAssigns);
|
|
|
+ var workflow = await query.FirstAsync();
|
|
|
+ if (workflow is null)
|
|
|
+ throw new UserFriendlyException("无效workflowId");
|
|
|
+
|
|
|
+ if (withSteps)
|
|
|
+ {
|
|
|
+ var steps = await _workflowStepRepository.Queryable()
|
|
|
+ .Where(d => d.WorkflowId == workflow.Id)
|
|
|
+ .OrderBy(d => d.CreationTime)
|
|
|
+ .ToTreeAsync(d => d.Steps, d => d.ParentId, null);
|
|
|
+ workflow.StepBoxes = steps;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (withTraces)
|
|
|
+ {
|
|
|
+ var traces = await _workflowTraceRepository.Queryable()
|
|
|
+ .Where(d => d.WorkflowId == workflow.Id)
|
|
|
+ .ToTreeAsync(d => d.Traces, d => d.ParentId, null);
|
|
|
+ workflow.Traces = traces;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ return workflow;
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
@@ -473,51 +493,9 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
return workflow.Definition.FindSteps(currentStepBox.NextSteps);
|
|
|
}
|
|
|
|
|
|
- public async Task<bool> ExsitsAsync(string moduleCode, string externalId, CancellationToken cancellationToken)
|
|
|
- {
|
|
|
- return await _workflowRepository.Queryable()
|
|
|
- .AnyAsync(d => d.ModuleCode == moduleCode && d.ExternalId == externalId);
|
|
|
- }
|
|
|
-
|
|
|
|
|
|
#region private
|
|
|
|
|
|
-
|
|
|
- private async Task<Workflow> GetWorkflowAsync(ISugarQueryable<Workflow> query, bool withDefine, bool withSteps, bool withTraces,
|
|
|
- bool withSupplements, bool withAssigns)
|
|
|
- {
|
|
|
- if (withDefine)
|
|
|
- query = query.Includes(d => d.Definition);
|
|
|
- if (withSupplements)
|
|
|
- query = query.Includes(d => d.Supplements);
|
|
|
- if (withAssigns)
|
|
|
- query = query.Includes(d => d.Assigns);
|
|
|
-
|
|
|
- var workflow = await query.FirstAsync();
|
|
|
- if (workflow is null)
|
|
|
- throw new UserFriendlyException("无效workflowId");
|
|
|
-
|
|
|
- if (withSteps)
|
|
|
- {
|
|
|
- var steps = await _workflowStepRepository.Queryable()
|
|
|
- .Where(d => d.WorkflowId == workflow.Id)
|
|
|
- .OrderBy(d => d.CreationTime)
|
|
|
- .ToTreeAsync(d => d.Steps, d => d.ParentId, null);
|
|
|
- workflow.StepBoxes = steps;
|
|
|
- }
|
|
|
-
|
|
|
- if (withTraces)
|
|
|
- {
|
|
|
- var traces = await _workflowTraceRepository.Queryable()
|
|
|
- .Where(d => d.WorkflowId == workflow.Id)
|
|
|
- .ToTreeAsync(d => d.Traces, d => d.ParentId, null);
|
|
|
- workflow.Traces = traces;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- return workflow;
|
|
|
- }
|
|
|
-
|
|
|
/// <summary>
|
|
|
/// 在stepCode对应的stepBox中找到开启会签流程的节点
|
|
|
/// </summary>
|