xf 2 月之前
父節點
當前提交
a33096ebf9

+ 25 - 0
src/Hotline.Api/Controllers/TestController.cs

@@ -1459,4 +1459,29 @@ ICallApplication callApplication,
 			}
 		}
 	}
+
+    ///// <summary>
+    ///// 重推归档数据(设置超期时间和归档时间)
+    ///// </summary>
+    ///// <param name="no"></param>
+    ///// <param name="expiredTime"></param>
+    ///// <param name="filedTime"></param>
+    ///// <returns></returns>
+    //[HttpGet("repush-order-file")]
+    //[AllowAnonymous]
+    //public async Task RepushOrderFile(string no, DateTime expiredTime, DateTime filedTime)
+    //{
+    //    var order = await _orderRepository.Queryable()
+    //        .FirstAsync(d => d.No == no, HttpContext.RequestAborted);
+
+    //    var workflow = await _workflowDomainService.GetWorkflowAsync(order.WorkflowId, withTraces: true);
+
+    //    var orderFlowDto = new OrderFlowDto
+    //    {
+    //        Order = _mapper.Map<OrderDto>(order),
+    //        WorkflowTrace = _mapper.Map<WorkflowTraceDto>(notification.Trace)
+    //    };
+
+    //    await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderFiled, orderFlowDto, cancellationToken: cancellationToken);
+    //}
 }

+ 45 - 27
src/Hotline.Application/FlowEngine/WorkflowApplication.cs

@@ -345,7 +345,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
     /// 退回(返回前一节点)
     /// </summary>
     public async Task<(Workflow workflow, WorkflowStep currentStep, StepDefine prevDefine,
-        WorkflowStep prevStep, WorkflowStep newStep, EFlowDirection flowDirection)> 
+        WorkflowStep prevStep, WorkflowStep newStep, EFlowDirection flowDirection)>
         PreviousAsync(PreviousWorkflowDto dto,
         Action<Workflow, StepDefine, WorkflowStep, WorkflowStep>? stepConfig = null,
         CancellationToken cancellationToken = default)
@@ -365,7 +365,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
     /// 工单退回(返回前一节点)
     /// </summary>
     public async Task<(Workflow workflow, WorkflowStep currentStep, StepDefine prevDefine,
-        WorkflowStep prevStep, WorkflowStep newStep, EFlowDirection flowDirection)> 
+        WorkflowStep prevStep, WorkflowStep newStep, EFlowDirection flowDirection)>
         PreviousAsync(PreviousWorkflowDto dto, string applicantId, string applicantOrgId, string[] applicantRoleIds,
         Action<Workflow, StepDefine, WorkflowStep, WorkflowStep>? stepConfig = null,
         CancellationToken cancellationToken = default)
@@ -593,13 +593,13 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
                             dto.OrgIds.Contains(d.ParentId))
                 .ToListAsync(cancellationToken);
             nextStepOption.Items = orgs.Select(d => new StepAssignInfo
-                {
-                    Key = d.Id,
-                    Value = d.Name,
-                    OrgId = d.Id,
-                    OrgName = d.Name,
-                    FlowAssignType = EFlowAssignType.Org
-                })
+            {
+                Key = d.Id,
+                Value = d.Name,
+                OrgId = d.Id,
+                OrgName = d.Name,
+                FlowAssignType = EFlowAssignType.Org
+            })
                 .ToList();
             nextStepOption.FlowDirection = _workflowDomainService.GetFlowDirection(dto.BusinessType, stepDefine.BusinessType);
             stepOptions.Add(nextStepOption);
@@ -734,7 +734,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
         var isEnd = workflow.Steps.Any(x => x.StepType == EStepType.End);
         var currentStep = workflow.Steps.FirstOrDefault(d => d.Id == workflow.ActualHandleStepId) ?? (isEnd
             ? workflow.Steps.Where(d => d.StepType == EStepType.End).MaxBy(d => d.CreationTime)
-            : workflow.Steps.Where(d=>d.Status!= EWorkflowStepStatus.Handled).MaxBy(d => d.CreationTime));
+            : workflow.Steps.Where(d => d.Status != EWorkflowStepStatus.Handled).MaxBy(d => d.CreationTime));
         if (currentStep is null)
             throw new UserFriendlyException("无效当前节点编号");
         var query = workflow.Steps.Where(d =>
@@ -876,9 +876,27 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
             //汇总节点只能选择对应节点办理对象
             if (workflow.FlowType is EFlowType.Handle
                 && stepDefine.StepType is EStepType.Summary
-                && stepDefine.BusinessType is EBusinessType.Seat or EBusinessType.Send)
+                /*&& stepDefine.BusinessType is EBusinessType.Seat or EBusinessType.Send*/)
             {
-                var handler = _workflowDomainService.GetSummaryTargetFlowStepHandler(workflow, stepDefine.SummaryTargetCode);
+                StepAssignInfo handler;
+                if (stepDefine.BusinessType is EBusinessType.Department)
+                {
+                    //todo 临时方案:解决跨级派单部门节点由中心办理造成的问题
+                    var upperOrgId = currentStep.HandlerOrgId.Substring(0, currentStep.HandlerOrgId.CalcOrgLevel() * 3);
+                    var org = await _organizeRepository.GetAsync(upperOrgId, cancellationToken);
+                    handler = new StepAssignInfo
+                    {
+                        OrgId = org.Id,
+                        OrgName = org.Name,
+                        Key = org.Id,
+                        Value = org.Name,
+                        FlowAssignType = EFlowAssignType.Org
+                    };
+                }
+                else
+                {
+                    handler = _workflowDomainService.GetSummaryTargetFlowStepHandler(workflow, stepDefine.SummaryTargetCode);
+                }
 
                 nextStepOption = new NextStepOption
                 {
@@ -1031,13 +1049,13 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
                 }
 
                 handlers = orgs1.Select(d => new StepAssignInfo
-                    {
-                        Key = d.Id,
-                        Value = d.Name,
-                        OrgId = d.Id,
-                        OrgName = d.Name,
-                        FlowAssignType = EFlowAssignType.Org
-                    })
+                {
+                    Key = d.Id,
+                    Value = d.Name,
+                    OrgId = d.Id,
+                    OrgName = d.Name,
+                    FlowAssignType = EFlowAssignType.Org
+                })
                     .ToList();
                 break;
             case EHandlerType.OrgType:
@@ -1049,13 +1067,13 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
                     .ToListAsync(cancellationToken);
 
                 handlers = orgs2.Select(d => new StepAssignInfo
-                    {
-                        Key = d.Id,
-                        Value = d.Name,
-                        OrgId = d.Id,
-                        OrgName = d.Name,
-                        FlowAssignType = EFlowAssignType.Org
-                    })
+                {
+                    Key = d.Id,
+                    Value = d.Name,
+                    OrgId = d.Id,
+                    OrgName = d.Name,
+                    FlowAssignType = EFlowAssignType.Org
+                })
                     .ToList();
                 break;
             default:
@@ -1114,7 +1132,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
             Items = new List<StepAssignInfo> { handler } //handlers //new List<Kv> { new(prevStep.HandlerId, prevStep.HandlerName) },
         };
     }
-    
+
     /// <summary>
     /// 动态策略
     /// </summary>

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

@@ -347,15 +347,6 @@ namespace Hotline.FlowEngine.Workflows
             //     await GetNextStepFlowAssignInfoAsync(workflow, currentStep, dto, nextStepDefine, isNextDynamic, cancellationToken);
             dto.FlowAssignType ??= SetNextStepAssignInfo(workflow, currentStep, dto, nextStepDefine, isNextDynamic);
 
-            /*
-             0.动态、会签固定指派方式
-             1.普通办理方式:依据配置决定指派对象,结合dto选择的nextHandlers
-             2.下一节点是按角色办理时可以不选办理对象,此时需指派给配置的角色
-             3.下一节点是汇总节点未选办理对象时:a.依据原节点办理人办理 b.依据原节点配置办理
-             4.开放action,允许按业务逻辑任意指派
-             5.任意场景下优先级:action > dto选择办理对象 > 业务逻辑指定
-             */
-
             if (!dto.NextHandlers.Any() && nextStepDefine.StepType != EStepType.End)
             {
                 //普通节点往汇总节点办理时可以不选,不选的场景主动去查之前的办理对象
@@ -400,7 +391,6 @@ namespace Hotline.FlowEngine.Workflows
             if (!dto.NextHandlers.Any() && nextStepDefine.StepType != EStepType.End)
                 throw new UserFriendlyException("未指定节点处理者");
 
-
             #region 办理当前节点
 
             if (dto.Files != null && dto.Files.Any())
@@ -1358,9 +1348,6 @@ namespace Hotline.FlowEngine.Workflows
         /// <summary>
         /// 根据汇总对象id找到被汇总节点,生成指派到用户的办理对象
         /// </summary>
-        /// <param name="workflow"></param>
-        /// <param name="stepDefine"></param>
-        /// <returns></returns>
         public StepAssignInfo GetSummaryTargetFlowStepHandler(Workflow workflow, string summaryTargetStepCode)
         {
             //根据汇总对象id找到被汇总节点