Эх сурвалжийг харах

fixed: terminal cs unupdate handlers

xf 1 жил өмнө
parent
commit
8227d05bc8

+ 22 - 2
src/Hotline/FlowEngine/Workflows/Workflow.cs

@@ -46,7 +46,7 @@ public partial class Workflow : CreationEntity
     /// 到期时间(期满时间)
     /// </summary>
     public DateTime ExpiredTime { get; set; }
-    
+
     /// <summary>
     /// 即将超期时间
     /// </summary>
@@ -481,7 +481,7 @@ public partial class Workflow
     /// </summary>
     public void UpdateActualOption()
     {
-        if(FlowType is EFlowType.Review) return;
+        if (FlowType is EFlowType.Review) return;
         var step = Steps.FirstOrDefault(d => d.Id == ActualHandleStepId);
         if (step is null)
             throw new UserFriendlyException($"未查询到对应实际办理子节点,workflowId: {Id}");
@@ -638,6 +638,26 @@ public partial class Workflow
             SetHandlers(assignType, handlerObjects);
     }
 
+    public void UpdateHandlers(List<string> handlers, EFlowAssignType assignType, List<HandlerGroupItem> handlerObjects)
+    {
+        foreach (var handler in handlers)
+        {
+            var orgItem = HandlerOrgs.FirstOrDefault(d => d.Key == handler);
+            if (orgItem != null)
+            {
+                HandlerOrgs.RemoveAll(d => d.GroupId == orgItem.GroupId);
+            }
+
+            var userItem = HandlerUsers.FirstOrDefault(d => d.Key == handler);
+            if (userItem != null)
+            {
+                HandlerUsers.RemoveAll(d => d.GroupId == userItem.GroupId);
+            }
+        }
+
+        SetHandlers(assignType, handlerObjects);
+    }
+
     private void SetHandlers(EFlowAssignType assignType, List<HandlerGroupItem> handlerObjects)
     {
         switch (assignType)

+ 16 - 7
src/Hotline/FlowEngine/Workflows/WorkflowDomainService.cs

@@ -1537,7 +1537,7 @@ namespace Hotline.FlowEngine.Workflows
                     throw new UserFriendlyException("未指定节点处理者");
                 if (stepDefine.HandlerType == EHandlerType.Role && !dto.NextHandlers.Any())
                 {
-                    handlers = flowAssignInfo.HandlerObjects.Select(d => new Kv(d.Key, d.Value)).ToList();
+                    handlers = flowAssignInfo.GetHandlers();
                 }
                 else
                 {
@@ -1699,20 +1699,29 @@ namespace Hotline.FlowEngine.Workflows
                 if (updateTraces.Any())
                     await _workflowTraceRepository.UpdateRangeAsync(updateTraces, cancellationToken);
 
+                await _workflowCountersignRepository.UpdateRangeAsync(updateCountersigns, cancellationToken);
+
+                //cp会签发起节点变为待办节点
+                //1. create terminal trace 2. 撤回至startStep
+                var newStep = await DuplicateStepWithTraceAsync(workflow, startCountersignStep, EWorkflowTraceStatus.Normal, cancellationToken);
+
                 if (workflow.CheckIfCountersignOver())
                     workflow.EndCountersign();
 
+                var removeHandlers = updateSteps.SelectMany(d => d.Handlers).Select(d => d.Key).ToList();
+
+                var handlerObjs = newStep.Handlers.Select(d => new HandlerGroupItem
+                {
+                    GroupId = Guid.NewGuid().ToString(),
+                    Key = d.Key,
+                    Value = d.Value
+                }).ToList();
+                workflow.UpdateHandlers(removeHandlers, newStep.FlowAssignType.Value, handlerObjs);
 
                 await _workflowRepository.UpdateAsync(workflow, cancellationToken);
 
-                await _workflowCountersignRepository.UpdateRangeAsync(updateCountersigns, cancellationToken);
             }
 
-            //cp会签发起节点变为待办节点
-            //1. create terminal trace 2. 撤回至startStep
-            await DuplicateStepWithTraceAsync(workflow, startCountersignStep, EWorkflowTraceStatus.Normal, cancellationToken);
-
-
             return workflow;
         }