|
@@ -6,6 +6,7 @@ using Hotline.Share.Enums.FlowEngine;
|
|
|
using Hotline.Users;
|
|
|
using MapsterMapper;
|
|
|
using MediatR;
|
|
|
+using Microsoft.Extensions.Logging;
|
|
|
using SqlSugar;
|
|
|
using XF.Domain.Authentications;
|
|
|
using XF.Domain.Dependency;
|
|
@@ -25,6 +26,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
private readonly ISessionContext _sessionContext;
|
|
|
private readonly IMapper _mapper;
|
|
|
private readonly IMediator _mediator;
|
|
|
+ private readonly ILogger<WorkflowDomainService> _logger;
|
|
|
|
|
|
public WorkflowDomainService(
|
|
|
IWorkflowRepository workflowRepository,
|
|
@@ -34,7 +36,8 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
IWorkflowAssignRepository workflowAssignRepository,
|
|
|
ISessionContext sessionContext,
|
|
|
IMapper mapper,
|
|
|
- IMediator mediator)
|
|
|
+ IMediator mediator,
|
|
|
+ ILogger<WorkflowDomainService> logger)
|
|
|
{
|
|
|
_workflowRepository = workflowRepository;
|
|
|
_workflowStepRepository = workflowStepRepository;
|
|
@@ -45,6 +48,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
_sessionContext = sessionContext;
|
|
|
_mapper = mapper;
|
|
|
_mediator = mediator;
|
|
|
+ _logger = logger;
|
|
|
}
|
|
|
|
|
|
public async Task<Workflow> CreateWorkflowAsync(Definition definition, string title, CancellationToken cancellationToken)
|
|
@@ -137,6 +141,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
{
|
|
|
var traces = await _workflowTraceRepository.Queryable()
|
|
|
.Where(d => d.WorkflowId == workflow.Id)
|
|
|
+ .OrderBy(d => d.CreationTime)
|
|
|
.ToTreeAsync(d => d.Traces, d => d.ParentId, null);
|
|
|
workflow.Traces = traces;
|
|
|
}
|
|
@@ -150,7 +155,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
/// </summary>
|
|
|
public async Task AcceptAsync(Workflow workflow, string userId, string userName, string orgCode, string orgName, CancellationToken cancellationToken)
|
|
|
{
|
|
|
- if(!workflow.CanHandle(_sessionContext.RequiredUserId,_sessionContext.RequiredOrgCode)) return;
|
|
|
+ if (!workflow.CanHandle(_sessionContext.RequiredUserId, _sessionContext.RequiredOrgCode)) return;
|
|
|
//工单完成以后查看的场景
|
|
|
if (workflow.Status is not EWorkflowStatus.Runnable) return;
|
|
|
|
|
@@ -176,7 +181,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
currentStepBox.Status = EWorkflowStepStatus.Accepted;
|
|
|
changedSteps.Add(currentStepBox);
|
|
|
}
|
|
|
- currentStep.Accept(userId, userName);
|
|
|
+ currentStep.Accept(userId, userName, _sessionContext.RequiredOrgCode, _sessionContext.OrgName);
|
|
|
|
|
|
//接办时非会签并且有多个接办部门时需更新接办部门
|
|
|
if (!workflow.IsInCountersign())
|
|
@@ -265,7 +270,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
}
|
|
|
|
|
|
//检查是否流转到流程终点
|
|
|
- if (nextStepBoxDefine.StepType is EStepType.End)
|
|
|
+ if (nextStepBoxDefine.StepType is EStepType.End && !workflow.IsInCountersign())
|
|
|
{
|
|
|
workflow.Complete();
|
|
|
await _workflowRepository.UpdateAsync(workflow, cancellationToken);
|
|
@@ -357,26 +362,6 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
_mediator.Publish(new NextStepNotify(workflow, dto, isStartCountersign, isCountersignOver, flowAssignMode));
|
|
|
}
|
|
|
|
|
|
- /// <summary>
|
|
|
- /// 更新下级汇总节点可办理状态
|
|
|
- /// </summary>
|
|
|
- /// <param name="nextStepBox"></param>
|
|
|
- /// <param name="currentStep"></param>
|
|
|
- /// <param name="cancellationToken"></param>
|
|
|
- /// <returns></returns>
|
|
|
- private async Task UpdateNextCountersignEndAssignedAsync(WorkflowStep nextStepBox, WorkflowStep currentStep, CancellationToken cancellationToken)
|
|
|
- {
|
|
|
- var countersignId = string.IsNullOrEmpty(currentStep.TopCountersignId)
|
|
|
- ? currentStep.PrevCountersignId
|
|
|
- : currentStep.TopCountersignId;
|
|
|
-
|
|
|
- var nextStep = nextStepBox.Steps.First(d => d.PrevCountersignId == countersignId);
|
|
|
- nextStep.SetAssigned();
|
|
|
-
|
|
|
- await _workflowStepRepository.UpdateAsync(nextStep, cancellationToken);
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
/// <summary>
|
|
|
/// 退回(返回前一节点)
|
|
|
/// </summary>
|
|
@@ -531,6 +516,25 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
|
|
|
#region private
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 更新下级汇总节点可办理状态
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="nextStepBox"></param>
|
|
|
+ /// <param name="currentStep"></param>
|
|
|
+ /// <param name="cancellationToken"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ private async Task UpdateNextCountersignEndAssignedAsync(WorkflowStep nextStepBox, WorkflowStep currentStep, CancellationToken cancellationToken)
|
|
|
+ {
|
|
|
+ var countersignId = string.IsNullOrEmpty(currentStep.TopCountersignId)
|
|
|
+ ? currentStep.PrevCountersignId
|
|
|
+ : currentStep.TopCountersignId;
|
|
|
+
|
|
|
+ var nextStep = nextStepBox.Steps.First(d => d.PrevCountersignId == countersignId);
|
|
|
+ nextStep.SetAssigned();
|
|
|
+
|
|
|
+ await _workflowStepRepository.UpdateAsync(nextStep, cancellationToken);
|
|
|
+ }
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// 在stepCode对应的stepBox中找到开启会签流程的节点
|
|
|
/// </summary>
|
|
@@ -595,8 +599,8 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
var trace = await GetWorkflowTraceAsync(workflow.Id, step.Id, cancellationToken);
|
|
|
_mapper.Map(dto, trace);
|
|
|
_mapper.Map(step, trace);
|
|
|
- trace.ExpiredTime = workflow.ExpiredTime;
|
|
|
- trace.TimeLimit = workflow.TimeLimit;
|
|
|
+ //trace.ExpiredTime = workflow.ExpiredTime;
|
|
|
+ //trace.TimeLimit = workflow.TimeLimit;
|
|
|
await _workflowTraceRepository.UpdateAsync(trace, cancellationToken);
|
|
|
}
|
|
|
|
|
@@ -709,7 +713,8 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
{
|
|
|
if (prevStep is null)
|
|
|
{
|
|
|
- //创建流程或特殊处理场景
|
|
|
+
|
|
|
+ //开始流程或向后跳转场景
|
|
|
await CreateSubStepsAsync(stepBoxDefine, dto, stepBox, string.Empty, EWorkflowStepStatus.Assigned,
|
|
|
null, null, cancellationToken);
|
|
|
}
|