Browse Source

Merge branch 'test' into lib/test

libin 2 months ago
parent
commit
2daa4228de

+ 3 - 1
src/Hotline.Application/FlowEngine/IWorkflowApplication.cs

@@ -48,7 +48,8 @@ namespace Hotline.Application.FlowEngine
         /// </summary>
         Task<(Workflow workflow, WorkflowStep currentStep, StepDefine prevDefine,
                 WorkflowStep prevStep, WorkflowStep newStep, EFlowDirection flowDirection)>
-            PreviousAsync(PreviousWorkflowDto dto,
+            PreviousAsync(PreviousWorkflowDto dto, 
+                EHandleMode handleMode = EHandleMode.Previous,
                 Action<Workflow, WorkflowStep, StepDefine, WorkflowStep, WorkflowStep>? newStepConfig = null,
                 CancellationToken cancellationToken = default);
 
@@ -58,6 +59,7 @@ namespace Hotline.Application.FlowEngine
         Task<(Workflow workflow, WorkflowStep currentStep, StepDefine prevDefine,
                 WorkflowStep prevStep, WorkflowStep newStep, EFlowDirection flowDirection)>
             PreviousAsync(PreviousWorkflowDto dto, string applicantId, string applicantOrgId, string[] applicantRoleIds,
+                EHandleMode handleMode = EHandleMode.Previous,
                 Action<Workflow, WorkflowStep, StepDefine, WorkflowStep, WorkflowStep>? newStepConfig = null,
                 CancellationToken cancellationToken = default);
 

+ 5 - 3
src/Hotline.Application/FlowEngine/WorkflowApplication.cs

@@ -347,6 +347,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
     public async Task<(Workflow workflow, WorkflowStep currentStep, StepDefine prevDefine,
             WorkflowStep prevStep, WorkflowStep newStep, EFlowDirection flowDirection)>
         PreviousAsync(PreviousWorkflowDto dto,
+            EHandleMode handleMode = EHandleMode.Previous,
             Action<Workflow, WorkflowStep, StepDefine, WorkflowStep, WorkflowStep>? newStepConfig = null,
             CancellationToken cancellationToken = default)
     {
@@ -358,7 +359,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
             _sessionContextProvider.SessionContext.RequiredOrgId, _sessionContextProvider.SessionContext.OrgName,
             _sessionContextProvider.SessionContext.OrgAreaCode, _sessionContextProvider.SessionContext.OrgAreaName,
             _sessionContextProvider.SessionContext.OrgIsCenter, _sessionContextProvider.SessionContext.Roles,
-            _sessionContextProvider.SessionContext.OrgLevel), newStepConfig, cancellationToken);
+            _sessionContextProvider.SessionContext.OrgLevel), handleMode, newStepConfig, cancellationToken);
     }
 
     /// <summary>
@@ -367,6 +368,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
     public async Task<(Workflow workflow, WorkflowStep currentStep, StepDefine prevDefine,
             WorkflowStep prevStep, WorkflowStep newStep, EFlowDirection flowDirection)>
         PreviousAsync(PreviousWorkflowDto dto, string applicantId, string applicantOrgId, string[] applicantRoleIds,
+            EHandleMode handleMode = EHandleMode.Previous,
             Action<Workflow, WorkflowStep, StepDefine, WorkflowStep, WorkflowStep>? newStepConfig = null,
             CancellationToken cancellationToken = default)
     {
@@ -381,7 +383,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
             applicantOrgId, user.Organization.Name,
             user.Organization.AreaCode, user.Organization.AreaName,
             user.Organization.IsCenter, applicantRoleIds,
-            user.Organization.Level), newStepConfig, cancellationToken);
+            user.Organization.Level), handleMode, newStepConfig, cancellationToken);
     }
 
     ///// <summary>
@@ -1867,7 +1869,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
     /// <summary>
     /// 检查退回节点信息
     /// </summary>
-    public async Task<(WorkflowStep currentStep, WorkflowStep prevStep,List<WorkflowStep> steps, bool isOrgToCenter, bool isSecondToFirstOrgLevel)>
+    public async Task<(WorkflowStep currentStep, WorkflowStep prevStep, List<WorkflowStep> steps, bool isOrgToCenter, bool isSecondToFirstOrgLevel)>
         GetPreviousInformationAsync(string workflowId, string operatorId, string operatorOrgId, string[] roles,
             CancellationToken cancellationToken)
     {

+ 88 - 56
src/Hotline.Application/Orders/OrderApplication.cs

@@ -109,9 +109,9 @@ public class OrderApplication : IOrderApplication, IScopeDependency
     private readonly IRepository<OrderTsDetails> _orderTsDetailsRepository;
     private readonly IRepository<KnowledgeQuote> _knowledgeQuoteRepository;
     private readonly IRepository<OrderSpecial> _orderSpecialRepository;
-	private readonly IWorkflowApplication _workflowApplication;
+    private readonly IWorkflowApplication _workflowApplication;
 
-	public OrderApplication(
+    public OrderApplication(
         IOrderDomainService orderDomainService,
         IOrderRepository orderRepository,
         IWorkflowDomainService workflowDomainService,
@@ -155,7 +155,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
         IRepository<OrderTsDetails> orderTsDetailsRepository,
         IRepository<KnowledgeQuote> knowledgeQuoteRepository,
         IRepository<OrderSpecial> orderSpecialRepository,
-		IWorkflowApplication workflowApplication)
+        IWorkflowApplication workflowApplication)
     {
         _orderDomainService = orderDomainService;
         _workflowDomainService = workflowDomainService;
@@ -202,7 +202,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
         _orderSpecialRepository = orderSpecialRepository;
         _workflowApplication = workflowApplication;
 
-	}
+    }
 
     /// <summary>
     /// 更新工单办理期满时间(延期调用,其他不调用)
@@ -5153,41 +5153,72 @@ public class OrderApplication : IOrderApplication, IScopeDependency
 
     #region 退回重写
 
-	public async Task OrderPrevious(OrderSendBackAudit sendBack,Order order, CancellationToken cancellationToken) {
-
-		var (workflow, currentStep, prevDefine, prevStep, newStep, flowDirection) =
-			   await _workflowApplication.PreviousAsync(sendBack.SendBackData,
-				   async (workflow1, currentStep1, prevStepDefine, prevStep1, newStep) =>
-				   {
-					   var stepAssignInfo =
-						   await GetOrderPreviousAssignInfoAsync(workflow1, prevStepDefine, prevStep1, cancellationToken);
-					   if (stepAssignInfo is null) return;
-					   var validator = new StepAssignInfoValidator();
-					   await validator.ValidateAndThrowAsync(stepAssignInfo);
-					   newStep.Assign(stepAssignInfo);
-					   if (sendBack.AssignStepId != prevStep1.Id) prevStep1.HandleMode = EHandleMode.PreviousNoDisplay;
-				   },
-				   cancellationToken);
-
-		if (sendBack.IsAssign.Value)
+    public async Task OrderPrevious(OrderSendBackAudit sendBack, Order order, CancellationToken cancellationToken)
+    {
+
+        //var (workflow, currentStep, prevDefine, prevStep, newStep, flowDirection) =
+        //       await _workflowApplication.PreviousAsync(sendBack.SendBackData,
+        //           async (workflow1, currentStep1, prevStepDefine, prevStep1, newStep) =>
+        //           {
+        //               var stepAssignInfo =
+        //                   await GetOrderPreviousAssignInfoAsync(workflow1, prevStepDefine, prevStep1, cancellationToken);
+        //               if (stepAssignInfo is null) return;
+        //               var validator = new StepAssignInfoValidator();
+        //               await validator.ValidateAndThrowAsync(stepAssignInfo);
+        //               newStep.Assign(stepAssignInfo);
+        //               if (sendBack.AssignStepId != prevStep1.Id) prevStep1.HandleMode = EHandleMode.PreviousNoDisplay;
+        //           },
+        //           cancellationToken);
+
+        //if (sendBack.IsAssign.Value)
+        //{
+        //    while (sendBack.AssignStepId != prevStep.Id)
+        //    {
+        //        (workflow, currentStep, prevDefine, prevStep, newStep, flowDirection) =
+        //       await _workflowApplication.PreviousAsync(sendBack.SendBackData,
+        //           async (workflow1, currentStep1, prevStepDefine, prevStep1, newStep) =>
+        //           {
+        //               var stepAssignInfo =
+        //                   await GetOrderPreviousAssignInfoAsync(workflow1, prevStepDefine, prevStep1, cancellationToken);
+        //               if (stepAssignInfo is null) return;
+        //               var validator = new StepAssignInfoValidator();
+        //               await validator.ValidateAndThrowAsync(stepAssignInfo);
+        //               newStep.Assign(stepAssignInfo);
+        //               if (sendBack.AssignStepId != prevStep.Id) prevStep1.HandleMode = EHandleMode.PreviousNoDisplay;
+        //           },
+        //           cancellationToken);
+        //    }
+        //}
+
+        var handleMode = EHandleMode.Previous;
+        WorkflowStep? currentStep, prevStep, newStep, startStep = null;
+        EFlowDirection flowDirection;
+        var userId = sendBack.WorkflowUserId;
+        var orgId = sendBack.WorkflowOrgId;
+        var roles = sendBack.WorkflowRoleIds.ToArray();
+        do
         {
-			while (sendBack.AssignStepId != prevStep.Id)
-			{
-                (workflow, currentStep, prevDefine, prevStep, newStep, flowDirection) =
-               await _workflowApplication.PreviousAsync(sendBack.SendBackData,
-                   async (workflow1, currentStep1, prevStepDefine, prevStep1, newStep) =>
-                   {
-                       var stepAssignInfo =
-                           await GetOrderPreviousAssignInfoAsync(workflow1, prevStepDefine, prevStep1, cancellationToken);
-                       if (stepAssignInfo is null) return;
-                       var validator = new StepAssignInfoValidator();
-                       await validator.ValidateAndThrowAsync(stepAssignInfo);
-                       newStep.Assign(stepAssignInfo);
-                       if (sendBack.AssignStepId != prevStep.Id) prevStep1.HandleMode = EHandleMode.PreviousNoDisplay;
-                   },
-                   cancellationToken);
-			}
-		}
+            (_, currentStep, _, prevStep, newStep, flowDirection) =
+                await _workflowApplication.PreviousAsync(sendBack.SendBackData,
+                    userId, orgId, roles, handleMode,
+                    async (workflow1, currentStep1, prevStepDefine, prevStep1, newStep) =>
+                    {
+                        var stepAssignInfo =
+                            await GetOrderPreviousAssignInfoAsync(workflow1, prevStepDefine, prevStep1, cancellationToken);
+                        if (stepAssignInfo is null) return;
+                        var validator = new StepAssignInfoValidator();
+                        await validator.ValidateAndThrowAsync(stepAssignInfo);
+                        newStep.Assign(stepAssignInfo);
+
+                        if (sendBack.AssignStepId != prevStep1.Id) handleMode = EHandleMode.PreviousNoDisplay;
+                    },
+                    cancellationToken);
+
+            startStep ??= currentStep;
+            userId = prevStep.HandlerId;
+            orgId = prevStep.HandlerOrgId;
+            roles = [prevStep.RoleId];
+        } while (sendBack.AssignStepId != prevStep.Id && prevStep.StepType is not EStepType.Start && !prevStep.IsOrigin);
 
         sendBack.ApplyOrgId = currentStep.AcceptorOrgId;
         sendBack.ApplyOrgName = currentStep!.AcceptorOrgName;
@@ -5196,29 +5227,30 @@ public class OrderApplication : IOrderApplication, IScopeDependency
         sendBack.SendBackStepName = prevStep.Name;
         sendBack.WorkflowStepSendBackCrTime = currentStep.CreationTime;
         sendBack.TraceId = currentStep.Id;
-		//记录退回后最新的流程节点
-		if (newStep != null && !string.IsNullOrEmpty(newStep.Id))
-			sendBack.NewCurrentStepId = newStep.Id;
+        //记录退回后最新的流程节点
+        if (newStep != null && !string.IsNullOrEmpty(newStep.Id))
+            sendBack.NewCurrentStepId = newStep.Id;
 
-		var processType = flowDirection == EFlowDirection.OrgToCenter || flowDirection == EFlowDirection.CenterToCenter
-			? EProcessType.Zhiban
-			: EProcessType.Jiaoban;
-		if (currentStep.AcceptorOrgId != OrgSeedData.CenterId && prevStep.BusinessType == EBusinessType.Send)
-			order.SendBackNum = order.SendBackNum.HasValue ? order.SendBackNum.Value + 1 : 1;
+        var processType = flowDirection == EFlowDirection.OrgToCenter || flowDirection == EFlowDirection.CenterToCenter
+            ? EProcessType.Zhiban
+            : EProcessType.Jiaoban;
+        if (currentStep.AcceptorOrgId != OrgSeedData.CenterId && prevStep.BusinessType == EBusinessType.Send)
+            order.SendBackNum = order.SendBackNum.HasValue ? order.SendBackNum.Value + 1 : 1;
 
-		if (prevStep.BusinessType == EBusinessType.Send)
+        if (prevStep.BusinessType == EBusinessType.Send)
         {
             await _orderRepository.Updateable().SetColumns(o => new Order()
             { CenterToOrgHandlerId = newStep.HandlerId, CenterToOrgHandlerName = newStep.HandlerName, ProcessType = processType, SendBackNum = order.SendBackNum })
                 .Where(o => o.Id == order.Id).ExecuteCommandAsync(cancellationToken);
         }
-        else {
-			await _orderRepository.Updateable().SetColumns(o => new Order() { ProcessType = processType, SendBackNum = order.SendBackNum })
-			.Where(o => o.Id == order.Id).ExecuteCommandAsync(cancellationToken);
-		}
-	
-
-		await _orderSendBackAuditRepository.AddAsync(sendBack, cancellationToken);
-	}
-	#endregion
+        else
+        {
+            await _orderRepository.Updateable().SetColumns(o => new Order() { ProcessType = processType, SendBackNum = order.SendBackNum })
+            .Where(o => o.Id == order.Id).ExecuteCommandAsync(cancellationToken);
+        }
+
+
+        await _orderSendBackAuditRepository.AddAsync(sendBack, cancellationToken);
+    }
+    #endregion
 }

+ 2 - 2
src/Hotline.Repository.SqlSugar/Orders/OrderRepository.cs

@@ -1872,7 +1872,7 @@ namespace Hotline.Repository.SqlSugar.Orders
                     FiledTime = x.OrderVisit.Order.FiledTime,
                     VisitOrgName = x.VisitOrgName,
                     ActualHandleOrgName = x.OrderVisit.Order.ActualHandleOrgName,
-                    IsProvinceOrder = x.OrderVisit.Order.Source == ESource.ProvinceStraight ? true : false,
+                    IsProvinceOrder = x.OrderVisit.Order.IsProvince,
                     OrderTag = SqlFunc.Subqueryable<OrderRelationTag>().InnerJoin<SystemDicData>((s, p) => s.TagId == p.Id).Where((s, p) => x.OrderVisit.OrderId == s.OrderId)
 .SelectStringJoin((s, p) => p.DicDataName, ",")
                 }).MergeTable().OrderByIF(string.IsNullOrEmpty(dto.SortField), x => x.VisitTime, OrderByType.Desc)
@@ -1946,7 +1946,7 @@ namespace Hotline.Repository.SqlSugar.Orders
                     FileOpinion = x.OrderVisit.Order.FileOpinion,
                     FiledTime = x.OrderVisit.Order.FiledTime,
                     VisitOrgName = x.VisitOrgName,
-                    IsProvinceOrder = x.OrderVisit.Order.Source == ESource.ProvinceStraight ? true : false,
+                    IsProvinceOrder = x.OrderVisit.Order.IsProvince,
                     ActualHandleOrgName = x.OrderVisit.Order.ActualHandleOrgName
                 }).MergeTable()
                 .OrderByIF(string.IsNullOrEmpty(dto.SortField), x => x.VisitTime, OrderByType.Desc)

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

@@ -92,7 +92,8 @@ namespace Hotline.FlowEngine.Workflows
         /// </summary>
         Task<(Workflow workflow, WorkflowStep currentStep, StepDefine prevDefine,
                 WorkflowStep prevStep, WorkflowStep newStep, EFlowDirection flowDirection)> PreviousAsync
-            (Workflow workflow, PreviousWorkflowDto dto, OperatorInfo operatorInfo,
+            (Workflow workflow, PreviousWorkflowDto dto, OperatorInfo operatorInfo, 
+                EHandleMode handleMode = EHandleMode.Previous,
                 Action<Workflow, WorkflowStep, StepDefine, WorkflowStep, WorkflowStep>? newStepConfig = null,
                 CancellationToken cancellationToken = default);
 

+ 3 - 2
src/Hotline/FlowEngine/Workflows/WorkflowDomainService.cs

@@ -888,7 +888,8 @@ namespace Hotline.FlowEngine.Workflows
         /// </summary>
         public async Task<(Workflow workflow, WorkflowStep currentStep, StepDefine prevDefine,
                 WorkflowStep prevStep, WorkflowStep newStep, EFlowDirection flowDirection)>
-            PreviousAsync(Workflow workflow, PreviousWorkflowDto dto, OperatorInfo operatorInfo,
+            PreviousAsync(Workflow workflow, PreviousWorkflowDto dto, OperatorInfo operatorInfo, 
+                EHandleMode handleMode = EHandleMode.Previous,
                 Action<Workflow, WorkflowStep, StepDefine, WorkflowStep, WorkflowStep>? newStepConfig = null,
                 CancellationToken cancellationToken = default)
         {
@@ -950,7 +951,7 @@ namespace Hotline.FlowEngine.Workflows
             trace.Handle(operatorInfo.UserId, operatorInfo.UserName,
                 operatorInfo.OrgId, operatorInfo.OrgName,
                 operatorInfo.OrgAreaCode, operatorInfo.OrgAreaName,
-                operatorInfo.OrgIsCenter, EHandleMode.Previous, dto.Opinion);
+                operatorInfo.OrgIsCenter, handleMode, dto.Opinion);
 
             //如果有传入期满时间 新节点为传入的期满时间
             if (dto.ExpiredTime.HasValue)