Browse Source

Merge branch 'release/yibin' of http://git.12345lm.cn/Fengwo/hotline into release/yibin

tangjiang 10 months ago
parent
commit
7f7aab9e55

+ 1 - 1
src/Hotline.Application/FlowEngine/WorkflowApplication.cs

@@ -331,7 +331,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
 
 
         //var stepHandlers = await GetNextStepHandlersAsync(workflow, targetStepDefine, dto, cancellationToken);
         //var stepHandlers = await GetNextStepHandlersAsync(workflow, targetStepDefine, dto, cancellationToken);
 
 
-        await _workflowDomainService.RecallAsync(workflow, dto, targetStepDefine, flowAssignInfo, expiredTime, _sessionContext, cancellationToken);
+        await _workflowDomainService.RecallAsync(workflow, dto, targetStepDefine, flowAssignInfo, expiredTime, cancellationToken);
     }
     }
 
 
     /// <summary>
     /// <summary>

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

@@ -67,7 +67,7 @@ namespace Hotline.FlowEngine.Workflows
         /// 撤回(返回到之前任意节点)
         /// 撤回(返回到之前任意节点)
         /// </summary>
         /// </summary>
         Task RecallAsync(Workflow workflow, RecallDto dto, StepDefine targetStepDefine, FlowAssignInfo flowAssignInfo,
         Task RecallAsync(Workflow workflow, RecallDto dto, StepDefine targetStepDefine, FlowAssignInfo flowAssignInfo,
-            DateTime? expiredTime, ISessionContext current, CancellationToken cancellationToken);
+            DateTime? expiredTime, CancellationToken cancellationToken);
 
 
         /// <summary>
         /// <summary>
         /// 撤回至开始节点
         /// 撤回至开始节点

+ 58 - 24
src/Hotline/FlowEngine/Workflows/WorkflowDomainService.cs

@@ -1,4 +1,5 @@
-using Hotline.File;
+using Dm;
+using Hotline.File;
 using Hotline.FlowEngine.Definitions;
 using Hotline.FlowEngine.Definitions;
 using Hotline.FlowEngine.Notifications;
 using Hotline.FlowEngine.Notifications;
 using Hotline.FlowEngine.WorkflowModules;
 using Hotline.FlowEngine.WorkflowModules;
@@ -571,11 +572,22 @@ namespace Hotline.FlowEngine.Workflows
             }
             }
 
 
             //update trace
             //update trace
-            var trace = await PreviousTraceAsync(workflow.Id, dto, currentStep,
-                applicantId, applicantName,
+            //var trace = await PreviousTraceAsync(workflow.Id, dto, currentStep,
+            //    applicantId, applicantName,
+            //    applicantOrgId, applicantOrgName,
+            //    applicantOrgAreaCode, applicantOrgAreaName,
+            //    applicantIsCenter, cancellationToken);
+            var trace = workflow.Traces.First(t => t.StepId == currentStep.Id);
+            _mapper.Map(dto, trace);
+
+            //HandleTrace(trace, dto.Opinion, current);
+
+            trace.Handle(applicantId, applicantName,
                 applicantOrgId, applicantOrgName,
                 applicantOrgId, applicantOrgName,
                 applicantOrgAreaCode, applicantOrgAreaName,
                 applicantOrgAreaCode, applicantOrgAreaName,
-                applicantIsCenter, cancellationToken);
+                applicantIsCenter, dto.Opinion);
+
+            //await _workflowTraceRepository.UpdateAsync(trace, cancellationToken);
 
 
             //复制上一个节点为待接办
             //复制上一个节点为待接办
             var newPrevStep = await DuplicateStepWithTraceAsync(workflow, prevStep, EWorkflowTraceType.Previous, cancellationToken);
             var newPrevStep = await DuplicateStepWithTraceAsync(workflow, prevStep, EWorkflowTraceType.Previous, cancellationToken);
@@ -959,14 +971,14 @@ namespace Hotline.FlowEngine.Workflows
         /// </summary>
         /// </summary>
         public async Task RecallAsync(Workflow workflow, RecallDto dto, StepDefine targetStepDefine,
         public async Task RecallAsync(Workflow workflow, RecallDto dto, StepDefine targetStepDefine,
             FlowAssignInfo flowAssignInfo, DateTime? expiredTime,
             FlowAssignInfo flowAssignInfo, DateTime? expiredTime,
-            ISessionContext current, CancellationToken cancellationToken)
+            CancellationToken cancellationToken)
         {
         {
             var targetStep = workflow.Steps.FirstOrDefault(d => d.Code == dto.NextStepCode && d.IsOrigin);
             var targetStep = workflow.Steps.FirstOrDefault(d => d.Code == dto.NextStepCode && d.IsOrigin);
             if (targetStep is null)
             if (targetStep is null)
                 throw UserFriendlyException.SameMessage("该流程尚未流转至该节点");
                 throw UserFriendlyException.SameMessage("该流程尚未流转至该节点");
 
 
             //update uncompleted traces
             //update uncompleted traces
-            await RecallTraceAsync(workflow.Id, dto.Opinion, current, cancellationToken);
+            //await RecallTraceAsync(workflow.Traces, dto.Opinion, _sessionContext, cancellationToken);
 
 
             var isOrgToCenter = await RecallAsync(workflow, dto, flowAssignInfo, targetStepDefine, targetStep,
             var isOrgToCenter = await RecallAsync(workflow, dto, flowAssignInfo, targetStepDefine, targetStep,
                 EWorkflowTraceType.Recall, expiredTime, cancellationToken);
                 EWorkflowTraceType.Recall, expiredTime, cancellationToken);
@@ -982,10 +994,10 @@ namespace Hotline.FlowEngine.Workflows
         public async Task RecallToStartStepAsync(string workflowId, string opinion, ISessionContext current, CancellationToken cancellationToken)
         public async Task RecallToStartStepAsync(string workflowId, string opinion, ISessionContext current, CancellationToken cancellationToken)
         {
         {
             //todo 1.当前待办节点删掉 2.当前待办trace更新(status, opinion) 3.复制startStep为待办 4.更新workflow(status, csStatus, handlers) 5.publish event
             //todo 1.当前待办节点删掉 2.当前待办trace更新(status, opinion) 3.复制startStep为待办 4.更新workflow(status, csStatus, handlers) 5.publish event
-            var workflow = await GetWorkflowAsync(workflowId, withDefine: true, withSteps: true,
+            var workflow = await GetWorkflowAsync(workflowId, withDefine: true, withSteps: true, withTraces: true,
                 cancellationToken: cancellationToken);
                 cancellationToken: cancellationToken);
             //update uncompleted traces
             //update uncompleted traces
-            await RecallTraceAsync(workflow.Id, opinion, current, cancellationToken);
+            await RecallTraceAsync(workflow.Traces, opinion, current, cancellationToken);
 
 
             var startStep = workflow.Steps.First(d => d.StepType == EStepType.Start);
             var startStep = workflow.Steps.First(d => d.StepType == EStepType.Start);
             workflow.Steps.RemoveAll(d => true);
             workflow.Steps.RemoveAll(d => true);
@@ -1886,27 +1898,24 @@ namespace Hotline.FlowEngine.Workflows
         //    await _workflowTraceRepository.UpdateRangeAsync(uncompleteTraces, cancellationToken);
         //    await _workflowTraceRepository.UpdateRangeAsync(uncompleteTraces, cancellationToken);
         //}
         //}
 
 
-        private void HandleTrace(WorkflowTrace trace, string opinion, ISessionContext current)
-        {
-            trace.Handle(
-                current.RequiredUserId, current.UserName,
-                current.RequiredOrgId, current.OrgName,
-                current.OrgAreaCode, current.OrgAreaName,
-                current.OrgIsCenter, opinion);
-        }
-
-        private async Task RecallTraceAsync(string workflowId, string opinion, ISessionContext current, CancellationToken cancellationToken)
+        private async Task RecallTraceAsync(List<WorkflowTrace> traces, string opinion, ISessionContext current, CancellationToken cancellationToken)
         {
         {
             //未办理的traces
             //未办理的traces
-            var uncompleteTraces =
-                await _workflowTraceRepository.QueryAsync(d =>
-                    d.WorkflowId == workflowId && string.IsNullOrEmpty(d.HandlerId));
+            //var uncompleteTraces =
+            //    await _workflowTraceRepository.QueryAsync(d =>
+            //        d.WorkflowId == workflowId && string.IsNullOrEmpty(d.HandlerId));
+
+            var uncompleteTraces = traces.Where(d => d.Status != EWorkflowStepStatus.Handled).ToList();
 
 
             if (uncompleteTraces.Any())
             if (uncompleteTraces.Any())
             {
             {
                 foreach (var trace in uncompleteTraces)
                 foreach (var trace in uncompleteTraces)
                 {
                 {
-                    HandleTrace(trace, opinion, current);
+                    trace.Handle(
+                        current.RequiredUserId, current.UserName,
+                        current.RequiredOrgId, current.OrgName,
+                        current.OrgAreaCode, current.OrgAreaName,
+                        current.OrgIsCenter, opinion);
                 }
                 }
 
 
                 await _workflowTraceRepository.UpdateRangeAsync(uncompleteTraces, cancellationToken);
                 await _workflowTraceRepository.UpdateRangeAsync(uncompleteTraces, cancellationToken);
@@ -2021,6 +2030,24 @@ namespace Hotline.FlowEngine.Workflows
             DateTime? expiredTime, CancellationToken cancellationToken)
             DateTime? expiredTime, CancellationToken cancellationToken)
         {
         {
             var targetIsStartStep = targetStepDefine.StepType is EStepType.Start;
             var targetIsStartStep = targetStepDefine.StepType is EStepType.Start;
+            var updateTraces = new List<WorkflowTrace>();
+
+            //update uncomplete traces
+            var uncompleteTraces = workflow.Traces.Where(d => d.Status != EWorkflowStepStatus.Handled).ToList();
+            if (uncompleteTraces.Any())
+            {
+                foreach (var trace in uncompleteTraces)
+                {
+                    trace.Handle(
+                        _sessionContext.RequiredUserId, _sessionContext.UserName,
+                        _sessionContext.RequiredOrgId, _sessionContext.OrgName,
+                        _sessionContext.OrgAreaCode, _sessionContext.OrgAreaName,
+                        _sessionContext.OrgIsCenter, dto.Opinion);
+                }
+
+                //await _workflowTraceRepository.UpdateRangeAsync(uncompleteTraces, cancellationToken);
+                updateTraces.AddRange(uncompleteTraces);
+            }
 
 
             //get targetStep's previous
             //get targetStep's previous
             WorkflowStep? targetPrevStep = null;
             WorkflowStep? targetPrevStep = null;
@@ -2043,10 +2070,17 @@ namespace Hotline.FlowEngine.Workflows
 
 
                 //更新快照对应节点状态
                 //更新快照对应节点状态
                 var stepIds = removeSteps.Select(d => d.Id).ToList();
                 var stepIds = removeSteps.Select(d => d.Id).ToList();
-                var updateTraces = workflow.Traces.Where(d => stepIds.Contains(d.StepId)).ToList();
-                await UpdateTracesStateAsync(updateTraces, EWorkflowTraceState.StepRemoveByRecall, cancellationToken);
+                var traces = workflow.Traces.Where(d => stepIds.Contains(d.StepId)).ToList();
+                //await UpdateTracesStateAsync(updateTraces, EWorkflowTraceState.StepRemoveByRecall, cancellationToken);
+                foreach (var trace in traces)
+                {
+                    trace.TraceState = EWorkflowTraceState.StepRemoveByRecall;
+                }
+                updateTraces.AddRange(traces);
             }
             }
 
 
+            await _workflowTraceRepository.UpdateRangeAsync(updateTraces, cancellationToken);
+
             workflow.EndCountersign();
             workflow.EndCountersign();
             workflow.ResetOption();
             workflow.ResetOption();
             if (workflow.Status is EWorkflowStatus.Completed)
             if (workflow.Status is EWorkflowStatus.Completed)