田爽 1 жил өмнө
parent
commit
4da44d44a6

+ 4 - 2
src/Hotline.Api/Controllers/OrderController.cs

@@ -2379,7 +2379,9 @@ public class OrderController : BaseController
                     ApplyOrgId = applyOrg.Id,
                     ApplyOrgId = applyOrg.Id,
                     ApplyOrgName = applyOrg.Name,
                     ApplyOrgName = applyOrg.Name,
                     SendBackOrgId = sendBackOrg.Id,
                     SendBackOrgId = sendBackOrg.Id,
-                    SendBackOrgName = sendBackOrg.Name
+                    SendBackOrgName = sendBackOrg.Name,
+                    WorkflowOrgId = _sessionContext.RequiredOrgId,
+                    WorkflowUserId = _sessionContext.RequiredUserId
                 };
                 };
                 await _orderSendBackAuditRepository.AddAsync(audit, HttpContext.RequestAborted);
                 await _orderSendBackAuditRepository.AddAsync(audit, HttpContext.RequestAborted);
             }
             }
@@ -2414,7 +2416,7 @@ public class OrderController : BaseController
 		//执行退回
 		//执行退回
 		if (sendBack.State ==  ESendBackAuditState.End)
 		if (sendBack.State ==  ESendBackAuditState.End)
 		{
 		{
-			await _workflowApplication.PreviousAsync(sendBack.SendBackData, HttpContext.RequestAborted);
+			await _workflowApplication.OrderPreviousAsync(sendBack.SendBackData, HttpContext.RequestAborted, sendBack.WorkflowOrgId,sendBack.WorkflowUserId);
 		}
 		}
 		await _orderSendBackAuditRepository.UpdateAsync(sendBack, HttpContext.RequestAborted);
 		await _orderSendBackAuditRepository.UpdateAsync(sendBack, HttpContext.RequestAborted);
 	}
 	}

+ 7 - 2
src/Hotline.Application/FlowEngine/IWorkflowApplication.cs

@@ -29,9 +29,14 @@ namespace Hotline.Application.FlowEngine
         Task PreviousAsync(PreviousWorkflowDto dto, CancellationToken cancellationToken);
         Task PreviousAsync(PreviousWorkflowDto dto, CancellationToken cancellationToken);
 
 
         /// <summary>
         /// <summary>
-        /// 撤回至任意节点
+        /// 工单退回(返回前一节点)
         /// </summary>
         /// </summary>
-        Task RecallAsync(RecallDto dto, CancellationToken cancellationToken);
+        Task OrderPreviousAsync(PreviousWorkflowDto dto, CancellationToken cancellationToken, string OrgId, string UserId);
+
+		/// <summary>
+		/// 撤回至任意节点
+		/// </summary>
+		Task RecallAsync(RecallDto dto, CancellationToken cancellationToken);
 
 
         /// <summary>
         /// <summary>
         /// 撤回至发起人节点
         /// 撤回至发起人节点

+ 13 - 3
src/Hotline.Application/FlowEngine/WorkflowApplication.cs

@@ -236,13 +236,23 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
     {
     {
         var workflow =
         var workflow =
             await _workflowDomainService.GetWorkflowAsync(dto.WorkflowId, withSteps: true, cancellationToken: cancellationToken);
             await _workflowDomainService.GetWorkflowAsync(dto.WorkflowId, withSteps: true, cancellationToken: cancellationToken);
-        await _workflowDomainService.PreviousAsync(workflow, dto, cancellationToken);
+        await _workflowDomainService.PreviousAsync(workflow, dto, cancellationToken, _sessionContext.RequiredOrgId, _sessionContext.RequiredUserId);
     }
     }
 
 
     /// <summary>
     /// <summary>
-    /// 撤回至任意节点
+    /// 工单退回(返回前一节点)
     /// </summary>
     /// </summary>
-    public async Task RecallAsync(RecallDto dto, CancellationToken cancellationToken)
+    public async Task OrderPreviousAsync(PreviousWorkflowDto dto, CancellationToken cancellationToken,string OrgId, string UserId)
+    {
+	    var workflow =
+		    await _workflowDomainService.GetWorkflowAsync(dto.WorkflowId, withSteps: true, cancellationToken: cancellationToken);
+	    await _workflowDomainService.PreviousAsync(workflow, dto, cancellationToken, OrgId, UserId);
+    }
+
+	/// <summary>
+	/// 撤回至任意节点
+	/// </summary>
+	public async Task RecallAsync(RecallDto dto, CancellationToken cancellationToken)
     {
     {
         var workflow =
         var workflow =
             await _workflowDomainService.GetWorkflowAsync(dto.WorkflowId, true, true, cancellationToken: cancellationToken);
             await _workflowDomainService.GetWorkflowAsync(dto.WorkflowId, true, true, cancellationToken: cancellationToken);

+ 1 - 1
src/Hotline/FlowEngine/Workflows/IWorkflowDomainService.cs

@@ -53,7 +53,7 @@ namespace Hotline.FlowEngine.Workflows
         /// 退回(返回前一节点)
         /// 退回(返回前一节点)
         /// </summary>
         /// </summary>
         /// <returns></returns>
         /// <returns></returns>
-        Task PreviousAsync(Workflow workflow, PreviousWorkflowDto dto, CancellationToken cancellationToken);
+        Task PreviousAsync(Workflow workflow, PreviousWorkflowDto dto, CancellationToken cancellationToken, string OrgId, string UserId);
 
 
         /// <summary>
         /// <summary>
         /// 撤回(返回到之前任意节点)
         /// 撤回(返回到之前任意节点)

+ 27 - 14
src/Hotline/FlowEngine/Workflows/WorkflowDomainService.cs

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

+ 12 - 0
src/Hotline/Orders/OrderSendBackAudit.cs

@@ -87,5 +87,17 @@ namespace Hotline.Orders
 		/// </summary>
 		/// </summary>
 		[SugarColumn(ColumnDescription = "退回部门名称")]
 		[SugarColumn(ColumnDescription = "退回部门名称")]
 		public string SendBackOrgName { get; set; }
 		public string SendBackOrgName { get; set; }
+
+		/// <summary>
+		/// 流程退回发起部门ID
+		/// </summary>
+		[SugarColumn(ColumnDescription = "流程退回发起部门ID")]
+		public string WorkflowOrgId { get; set; }
+
+		/// <summary>
+		/// 流程退回发起用户ID
+		/// </summary>
+		[SugarColumn(ColumnDescription = "流程退回发起用户ID")]
+		public string WorkflowUserId { get; set; }
 	}
 	}
 }
 }