|
@@ -9,6 +9,7 @@ using Hotline.Share.Dtos.FlowEngine.Definition;
|
|
|
using Hotline.Share.Dtos.FlowEngine.Workflow;
|
|
|
using Hotline.Share.Enums.FlowEngine;
|
|
|
using Hotline.Share.Enums.Settings;
|
|
|
+using Hotline.Users;
|
|
|
using MapsterMapper;
|
|
|
using MediatR;
|
|
|
using Microsoft.Extensions.Logging;
|
|
@@ -32,8 +33,10 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
private readonly IMediator _mediator;
|
|
|
private readonly ILogger<WorkflowDomainService> _logger;
|
|
|
private readonly IFileRepository _fileRepository;
|
|
|
+ private readonly IRepository<User> _userRepository;
|
|
|
+ private readonly IRepository<SystemOrganize> _organizationsRepository;
|
|
|
|
|
|
- public WorkflowDomainService(
|
|
|
+ public WorkflowDomainService(
|
|
|
IWorkflowRepository workflowRepository,
|
|
|
IRepository<WorkflowStep> workflowStepRepository,
|
|
|
IRepository<WorkflowTrace> workflowTraceRepository,
|
|
@@ -43,7 +46,9 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
IMapper mapper,
|
|
|
IMediator mediator,
|
|
|
ILogger<WorkflowDomainService> logger,
|
|
|
- IFileRepository fileRepository)
|
|
|
+ IRepository<User> userRepository,
|
|
|
+ IRepository<SystemOrganize> organizationsRepository,
|
|
|
+ IFileRepository fileRepository)
|
|
|
{
|
|
|
_workflowRepository = workflowRepository;
|
|
|
_workflowStepRepository = workflowStepRepository;
|
|
@@ -55,7 +60,9 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
_mediator = mediator;
|
|
|
_logger = logger;
|
|
|
_fileRepository = fileRepository;
|
|
|
- }
|
|
|
+ _userRepository = userRepository;
|
|
|
+ _organizationsRepository = organizationsRepository;
|
|
|
+ }
|
|
|
|
|
|
public async Task<Workflow> CreateWorkflowAsync(WorkflowModule wfModule, string title, string userId,
|
|
|
string userCode,
|
|
@@ -273,7 +280,7 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
public async Task NextAsync(Workflow workflow, WorkflowStep currentStep, NextWorkflowDto dto,
|
|
|
StepDefine nextStepDefine, FlowAssignInfo flowAssignInfo, CancellationToken cancellationToken)
|
|
|
{
|
|
|
- ValidatePermission(workflow);
|
|
|
+ ValidatePermission(workflow,_sessionContext.RequiredOrgId,_sessionContext.RequiredUserId);
|
|
|
CheckWhetherRunnable(workflow.Status);
|
|
|
|
|
|
#region 办理当前节点
|
|
@@ -457,15 +464,14 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
/// 退回(返回前一节点)
|
|
|
/// </summary>
|
|
|
/// <returns></returns>
|
|
|
- public async Task PreviousAsync(Workflow workflow, PreviousWorkflowDto dto, CancellationToken cancellationToken)
|
|
|
+ public async Task PreviousAsync(Workflow workflow, PreviousWorkflowDto dto, CancellationToken cancellationToken, string OrgId, string UserId)
|
|
|
{
|
|
|
- ValidatePermission(workflow);
|
|
|
+ ValidatePermission(workflow, OrgId, UserId);
|
|
|
CheckWhetherRunnable(workflow.Status);
|
|
|
if (workflow.IsInCountersign)
|
|
|
throw UserFriendlyException.SameMessage("会签流程不支持退回");
|
|
|
|
|
|
- var currentStep = GetUnHandleStep(workflow.Steps, _sessionContext.RequiredOrgId,
|
|
|
- _sessionContext.RequiredUserId);
|
|
|
+ var currentStep = GetUnHandleStep(workflow.Steps, OrgId, UserId);
|
|
|
|
|
|
if (currentStep.StepType is EStepType.Start)
|
|
|
throw UserFriendlyException.SameMessage("当前流程已退回到开始节点");
|
|
@@ -491,16 +497,23 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
|
|
|
if (workflow.Status is EWorkflowStatus.Completed)
|
|
|
workflow.SetStatusRunnable();
|
|
|
+ var user = await _userRepository.GetAsync(UserId,cancellationToken);
|
|
|
+ var org = await _organizationsRepository.GetAsync(OrgId, cancellationToken);
|
|
|
|
|
|
//更新当前办理节点信息
|
|
|
+ //workflow.UpdateWorkflowCurrentStepInfo(false,
|
|
|
+ // _sessionContext.RequiredUserId, _sessionContext.UserName,
|
|
|
+ // _sessionContext.RequiredOrgId, _sessionContext.OrgName,
|
|
|
+ // _sessionContext.OrgAreaCode, _sessionContext.OrgAreaName,
|
|
|
+ // nextStep: newPrevStep);
|
|
|
workflow.UpdateWorkflowCurrentStepInfo(false,
|
|
|
- _sessionContext.RequiredUserId, _sessionContext.UserName,
|
|
|
- _sessionContext.RequiredOrgId, _sessionContext.OrgName,
|
|
|
- _sessionContext.OrgAreaCode, _sessionContext.OrgAreaName,
|
|
|
+ user.Id, user.Name,
|
|
|
+ org.Id, org.Name,
|
|
|
+ org.AreaCode, org.AreaName,
|
|
|
nextStep: newPrevStep);
|
|
|
|
|
|
//更新流程可办理对象
|
|
|
- workflow.UpdatePreviousHandlers(_sessionContext.RequiredUserId, _sessionContext.RequiredOrgId, newPrevStep);
|
|
|
+ workflow.UpdatePreviousHandlers(UserId, OrgId, newPrevStep);
|
|
|
|
|
|
//orgToCenter会触发重新计算期满时间,1.无需审核按当前时间进行计算 2.需审核按审核通过时间计算
|
|
|
var isOrgToCenter = prevStep.BusinessType is EBusinessType.Send && prevStep.IsOrigin;
|
|
@@ -1478,9 +1491,9 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
throw UserFriendlyException.SameMessage("当前流程状态不可继续流转");
|
|
|
}
|
|
|
|
|
|
- private void ValidatePermission(Workflow workflow)
|
|
|
+ private void ValidatePermission(Workflow workflow, string OrgId, string UserId)
|
|
|
{
|
|
|
- if (!workflow.CanHandle(_sessionContext.RequiredUserId, _sessionContext.RequiredOrgId))
|
|
|
+ if (!workflow.CanHandle(UserId, OrgId))
|
|
|
throw UserFriendlyException.SameMessage("无办理权限");
|
|
|
}
|
|
|
|