فهرست منبع

fix: 签收时更新流程办理对象以及节点办理对象

xf 11 ماه پیش
والد
کامیت
50f94b5220

+ 5 - 6
src/Hotline.Api/Controllers/OrderController.cs

@@ -4657,12 +4657,11 @@ public class OrderController : BaseController
 
         if (!string.IsNullOrEmpty(order.WorkflowId))
         {
-            var workflow = await _workflowDomainService.GetWorkflowAsync(order.WorkflowId,
-                    cancellationToken: HttpContext.RequestAborted);
-            workflow.HandlerOrgs = new();
-            workflow.HandlerUsers = new();
-            workflow.Assign(EFlowAssignType.User, _sessionContext.RequiredUserId);
-            await _workflowRepository.UpdateAsync(workflow, HttpContext.RequestAborted);
+            var workflow = await _workflowDomainService.SignToSomebodyAsync(
+                order.WorkflowId,
+                _sessionContext.RequiredUserId, _sessionContext.UserName, 
+                _sessionContext.RequiredOrgId, _sessionContext.OrgName,
+                HttpContext.RequestAborted);
 
             order.HandlerOrgs = workflow.HandlerOrgs;
             order.HandlerUsers= workflow.HandlerUsers;

+ 6 - 2
src/Hotline/FlowEngine/Workflows/IWorkflowDomainService.cs

@@ -239,7 +239,11 @@ namespace Hotline.FlowEngine.Workflows
         /// <summary>
         /// 查询流转方向
         /// </summary>
-        EFlowDirection GetFlowDirection(EBusinessType sourceStepBusinessType,
-            EBusinessType directionStepBusinessType);
+        EFlowDirection GetFlowDirection(EBusinessType sourceStepBusinessType, EBusinessType directionStepBusinessType);
+
+        /// <summary>
+        /// 流程被签收至某个用户(更新流转对象,办理对象,节点办理对象以及stepHandlers)
+        /// </summary>
+        Task<Workflow> SignToSomebodyAsync(string workflowId, string userId, string username, string orgId, string orgName, CancellationToken cancellationToken);
     }
 }

+ 38 - 0
src/Hotline/FlowEngine/Workflows/WorkflowDomainService.cs

@@ -809,6 +809,44 @@ namespace Hotline.FlowEngine.Workflows
             }
         }
 
+        /// <summary>
+        /// 流程被签收至某个用户(更新流转对象,办理对象,节点办理对象以及stepHandlers)
+        /// </summary>
+        public async Task<Workflow> SignToSomebodyAsync(string workflowId, string userId, string username, string orgId, string orgName, CancellationToken cancellationToken)
+        {
+            var workflow = await GetWorkflowAsync(workflowId, withSteps: true, cancellationToken: cancellationToken);
+            workflow.Assign(EFlowAssignType.User, _sessionContext.RequiredUserId);
+
+            workflow.HandlerOrgs = new();
+            workflow.HandlerUsers = new List<HandlerGroupItem>
+            {
+                new()
+                {
+                    GroupId = Guid.NewGuid().ToString(),
+                    Key = userId,
+                    Value = username
+                }
+            };
+
+            var startStep = workflow.Steps.First(d => d.StepType == EStepType.Start && d.IsOrigin);
+            startStep.Handlers = new List<Kv> { new(userId, username) };
+
+            var stepHandler = startStep.StepHandlers.First();
+            startStep.StepHandlers.RemoveAll(d => d.Id != stepHandler.Id);
+            stepHandler.UserId = userId;
+            stepHandler.Username = username;
+            stepHandler.OrgId = orgId;
+            stepHandler.OrgName = orgName;
+
+            await _workflowStepRepository.UpdateNav(startStep)
+                .Include(d => d.StepHandlers)
+                .ExecuteCommandAsync();
+
+            await _workflowRepository.UpdateAsync(workflow, cancellationToken);
+
+            return workflow;
+        }
+
         /// <summary>
         /// 查找当前会签内所有节点(含start,end)
         /// </summary>