Bladeren bron

退回审批

田爽 1 jaar geleden
bovenliggende
commit
4da44d44a6

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

@@ -2379,7 +2379,9 @@ public class OrderController : BaseController
                     ApplyOrgId = applyOrg.Id,
                     ApplyOrgName = applyOrg.Name,
                     SendBackOrgId = sendBackOrg.Id,
-                    SendBackOrgName = sendBackOrg.Name
+                    SendBackOrgName = sendBackOrg.Name,
+                    WorkflowOrgId = _sessionContext.RequiredOrgId,
+                    WorkflowUserId = _sessionContext.RequiredUserId
                 };
                 await _orderSendBackAuditRepository.AddAsync(audit, HttpContext.RequestAborted);
             }
@@ -2414,7 +2416,7 @@ public class OrderController : BaseController
 		//执行退回
 		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);
 	}

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

@@ -29,9 +29,14 @@ namespace Hotline.Application.FlowEngine
         Task PreviousAsync(PreviousWorkflowDto dto, CancellationToken cancellationToken);
 
         /// <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>
         /// 撤回至发起人节点

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

@@ -236,13 +236,23 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
     {
         var workflow =
             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>
-    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 =
             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>
         /// <returns></returns>
-        Task PreviousAsync(Workflow workflow, PreviousWorkflowDto dto, CancellationToken cancellationToken);
+        Task PreviousAsync(Workflow workflow, PreviousWorkflowDto dto, CancellationToken cancellationToken, string OrgId, string UserId);
 
         /// <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.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("无办理权限");
         }
 

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

@@ -87,5 +87,17 @@ namespace Hotline.Orders
 		/// </summary>
 		[SugarColumn(ColumnDescription = "退回部门名称")]
 		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; }
 	}
 }