xf 2 gadi atpakaļ
vecāks
revīzija
56c9661845

+ 1 - 1
src/Hotline/FlowEngine/Workflows/IWorkflowDomainService.cs

@@ -15,7 +15,7 @@ namespace Hotline.FlowEngine.Workflows
         /// <summary>
         /// 查询工作流
         /// </summary>
-        Task<Workflow> GetWorkflowAsync(string workflowId, bool withDefine = false, bool withSteps = false, bool withTraces = false, bool withSupplements = false, CancellationToken cancellationToken = default);
+        Task<Workflow> GetWorkflowAsync(string workflowId, bool withDefine = false, bool withSteps = false, bool withTraces = false, bool withSupplements = false, bool withAssigns = false, CancellationToken cancellationToken = default);
 
         /// <summary>
         /// 受理,接办

+ 7 - 0
src/Hotline/FlowEngine/Workflows/Workflow.cs

@@ -77,6 +77,12 @@ public class Workflow : CreationEntity
     [Navigate(NavigateType.OneToMany, nameof(WorkflowSupplement.WorkflowId))]
     public List<WorkflowSupplement> Supplements { get; set; }
 
+    /// <summary>
+    /// 接办信息
+    /// </summary>
+    [Navigate(NavigateType.OneToMany, nameof(WorkflowAssign.WorkflowId))]
+    public List<WorkflowAssign> Assigns { get; set; }
+
     /// <summary>
     /// 主节点,依据流转进度动态生成或删除
     /// </summary>
@@ -86,6 +92,7 @@ public class Workflow : CreationEntity
     [SugarColumn(IsIgnore = true)]
     public List<WorkflowTrace> Traces { get; set; } = new();
 
+    
     #region Mehod
 
     /// <summary>

+ 25 - 1
src/Hotline/FlowEngine/Workflows/WorkflowDomainService.cs

@@ -100,6 +100,7 @@ namespace Hotline.FlowEngine.Workflows
         public async Task<Workflow> GetWorkflowAsync(string workflowId,
             bool withDefine = false, bool withSteps = false,
             bool withTraces = false, bool withSupplements = false,
+            bool withAssigns = false,
             CancellationToken cancellationToken = default)
         {
             var query = _workflowRepository.Queryable();
@@ -107,6 +108,8 @@ namespace Hotline.FlowEngine.Workflows
                 query = query.Includes(d => d.Definition);
             if (withSupplements)
                 query = query.Includes(d => d.Supplements);
+            if (withAssigns)
+                query = query.Includes(d => d.Assigns);
 
             var workflow = await query.FirstAsync(d => d.Id == workflowId);
             if (workflow is null)
@@ -129,11 +132,13 @@ namespace Hotline.FlowEngine.Workflows
                 workflow.Traces = traces;
             }
 
+
+
             return workflow;
         }
 
         /// <summary>
-        /// 受理
+        /// 受理(接办)
         /// </summary>
         public async Task AcceptAsync(Workflow workflow, CancellationToken cancellationToken)
         {
@@ -160,6 +165,19 @@ namespace Hotline.FlowEngine.Workflows
                 currentStepBox.Status = EWorkflowStepStatus.Accepted;
             currentStep.Accept(_sessionContext.RequiredUserId, _sessionContext.UserName);
 
+            //接办时非会签并且有多个接办部门时需更新接办部门
+            if (!workflow.IsInCountersign())
+            {
+                var assigns = await _workflowAssignRepository.QueryAsync(d => d.WorkflowId == workflow.Id);
+                if (assigns.Count > 1)
+                {
+                    await _workflowAssignRepository.RemoveRangeAsync(assigns, cancellationToken);
+
+                    var assign = WorkflowAssign.Create(workflow.Id, _sessionContext.OrgCode, _sessionContext.OrgName);
+                    await _workflowAssignRepository.AddAsync(assign, cancellationToken);
+                }
+            }
+
             await AcceptTraceAsync(workflow, currentStepBox, currentStep, cancellationToken);
 
             await _mediator.Publish(new AcceptWorkflowNotify(workflow), cancellationToken);
@@ -242,6 +260,12 @@ namespace Hotline.FlowEngine.Workflows
                 workflow.AssignTime = DateTime.Now;
             }
 
+            //最终办理意见
+            if (nextStepBoxDefine.StepType is not EStepType.Normal)
+            {
+                workflow.Opinion = dto.Opinion;
+            }
+
             //创建下一节点
             var nextStepBox = await CreateStepAsync(workflow, nextStepBoxDefine, dto, currentStepBox, currentStep, cancellationToken);