xf 1 year ago
parent
commit
c9d65fb990

+ 2 - 2
src/Hotline/FlowEngine/Workflows/StepBasicEntity.cs

@@ -30,9 +30,9 @@ public abstract class StepBasicEntity : CreationEntity
     public string? PrevChosenStepCode { get; set; }
 
     /// <summary>
-    /// 是否为实际办理对象
+    /// 是否实际办理过该工单
     /// </summary>
-    public bool IsActualHandler { get; set; }
+    public bool? IsActualHandled { get; set; }
 
     #region 接办
 

+ 17 - 4
src/Hotline/FlowEngine/Workflows/Workflow.cs

@@ -322,6 +322,16 @@ public partial class Workflow : CreationEntity
 
     #endregion
 
+    #region 会签实际办理对象
+
+    [SugarColumn(ColumnDataType = "json", IsJson = true)]
+    public List<string>? CsActualHandleOrgIds { get; set; } = new();
+
+    [SugarColumn(ColumnDataType = "json", IsJson = true)]
+    public List<string>? CsActualHandleUserIds { get; set; } = new();
+
+    #endregion
+
     #region 一级部门
 
     /// <summary>
@@ -377,10 +387,6 @@ public partial class Workflow : CreationEntity
 
 }
 
-public partial class WorkflowOrder : Workflow
-{
-    public Order Order { get; set; }
-}
 public partial class Workflow
 {
     [Navigate(NavigateType.OneToOne, nameof(DefinitionId))]
@@ -807,6 +813,13 @@ public partial class Workflow
     /// <returns></returns>
     public WorkflowStep? GetActualStep() => Steps.FirstOrDefault(d => d.Id == ActualHandleStepId);
 
+    public void AddCsActualHandler(string userId, string orgId)
+    {
+        CsActualHandleUserIds ??= new();
+        if (!CsActualHandleUserIds.Exists(d => d == userId))
+            CsActualHandleUserIds.Add(userId);
+    }
+
     #endregion
 }
 

+ 19 - 4
src/Hotline/FlowEngine/Workflows/WorkflowDomainService.cs

@@ -287,6 +287,8 @@ namespace Hotline.FlowEngine.Workflows
 
             await HandleStepAsync(currentStep, workflow, dto, counterSignType, cancellationToken);
 
+            currentStep.IsActualHandled = CheckIsActualHandle(workflow, currentStep, nextStepDefine, dto);
+
             //update realhandle info
             _mapper.Map(dto, workflow);
 
@@ -1047,14 +1049,27 @@ namespace Hotline.FlowEngine.Workflows
 
             //办理参数
             _mapper.Map(dto, step);
-
-            //if (workflow.FlowType is EFlowType.Handle)
-            //1. workflow是否为办理类型 2. 非会签:当前是否为普通节点and下一节点是否为汇总 or endStep 3. 会签:当前操作为汇总还是继续往下办理?thk: 汇总以后但未回到top又往下办理的场景,前面实际办理部门如何处理?//todo 待确认
-
+            
             //step办理状态
             HandleStep(step, dto.NextStepCode);
         }
 
+        private bool CheckIsActualHandle(Workflow workflow, WorkflowStep step, StepDefine nextStepDefine, BasicWorkflowDto dto)
+        {
+            //1. workflow是否为办理类型 2. 非会签:当前是否为普通节点and下一节点是否为汇总 or endStep 3. 会签:当前操作为汇总还是继续往下办理?thk: 汇总以后但未回到top又往下办理的场景,前面实际办理部门也算作办理部门
+            if (workflow.FlowType is not EFlowType.Handle) return false;
+
+            if (workflow.IsInCountersign)
+            {
+                return dto.BackToCountersignEnd;
+            }
+            else
+            {
+                return step.StepType is EStepType.Normal &&
+                       nextStepDefine.StepType is EStepType.Summary or EStepType.End;
+            }
+        }
+
         /// <summary>
         /// 办理节点(赋值节点的办理对象信息)
         /// </summary>

+ 10 - 0
src/Hotline/Orders/Order.cs

@@ -329,6 +329,16 @@ namespace Hotline.Orders
 
         public ETimeType? TimeLimitUnit { get; set; }
 
+        #region 会签实际办理对象
+
+        [SugarColumn(ColumnDataType = "json", IsJson = true)]
+        public List<string>? CsActualHandleOrgIds { get; set; } = new();
+
+        [SugarColumn(ColumnDataType = "json", IsJson = true)]
+        public List<string>? CsActualHandleUserIds { get; set; } = new();
+
+        #endregion
+
         #region 实际办理信息(节点,部门,意见)
 
         /// <summary>