Pārlūkot izejas kodu

fixed: 直接归档抛异常

xf 2 mēneši atpakaļ
vecāks
revīzija
dd3844c8fd

+ 35 - 19
src/Hotline.Api/Controllers/OrderController.cs

@@ -5857,11 +5857,11 @@ public class OrderController : BaseController
             dto.Cause = dto.Reason;
         }
 
-        var workflow = await _workflowDomainService.GetWorkflowAsync(order.WorkflowId, withSteps: true,
-            cancellationToken: HttpContext.RequestAborted);
-        var currentStep = workflow.Steps.FirstOrDefault(x => x.Status != EWorkflowStepStatus.Handled);
-        if (currentStep is null)
-            currentStep = workflow.Steps.OrderByDescending(x => x.CreationTime).FirstOrDefault(x => x.StepType == EStepType.End);
+        // var workflow = await _workflowDomainService.GetWorkflowAsync(order.WorkflowId, withSteps: true,
+        //     cancellationToken: HttpContext.RequestAborted);
+        // var currentStep = workflow.Steps.FirstOrDefault(x => x.Status != EWorkflowStepStatus.Handled);
+        // if (currentStep is null)
+        //     currentStep = workflow.Steps.OrderByDescending(x => x.CreationTime).FirstOrDefault(x => x.StepType == EStepType.End);
 
         if (string.IsNullOrEmpty(dto.Cause))
         {
@@ -5869,11 +5869,13 @@ public class OrderController : BaseController
         }
 
         var model = _mapper.Map<OrderSpecial>(dto);
-        model.OrgId = currentStep is null ? _sessionContext.RequiredOrgId : currentStep.HandlerOrgId;
-        model.OrgName = currentStep is null ? _sessionContext.OrgName : currentStep.HandlerOrgName;
-        var step = await _workflowDomainService.FindLastStepAsync(model.WorkflowId, HttpContext.RequestAborted);
-        model.StepName = step.Name;
-        model.StepCode = step.Code;
+        // model.OrgId = currentStep is null ? _sessionContext.RequiredOrgId : currentStep.HandlerOrgId;
+        // model.OrgName = currentStep is null ? _sessionContext.OrgName : currentStep.HandlerOrgName;
+        model.OrgId = _sessionContext.RequiredOrgId;
+        model.OrgName = _sessionContext.OrgName;
+        //var step = await _workflowDomainService.FindLastStepAsync(model.WorkflowId, HttpContext.RequestAborted);
+        // model.StepName = step.Name;
+        // model.StepCode = step.Code;
         model.Status = order.Status;
 
         var audit = true;
@@ -5900,7 +5902,7 @@ public class OrderController : BaseController
         model.InitId();
         if (dto.Files.Any())
             model.FileJson = await _fileRepository.AddFileAsync(dto.Files, model.Id, "", HttpContext.RequestAborted);
-        await _orderSpecialRepository.AddAsync(model, HttpContext.RequestAborted);
+        //await _orderSpecialRepository.AddAsync(model, HttpContext.RequestAborted);
         if (model.State == 1)
         {
             //var handler = dto.NextHandlers.FirstOrDefault();
@@ -5991,7 +5993,7 @@ public class OrderController : BaseController
             //         .Where(o => o.Id == order.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
             // }
 
-            await _workflowDomainService.RecallAsync(recall, dto.NextHandlers.FirstOrDefault(), EWorkflowTraceType.Recall,
+            var (workflow, targetStepDefine, currentStep, targetStep, newStep, isOrgToCenter) = await _workflowDomainService.RecallAsync(recall, dto.NextHandlers.FirstOrDefault(), EWorkflowTraceType.Recall,
                 expiredTime.ExpiredTime, order.Status >= EOrderStatus.Filed, EHandleMode.Recall,
                 async (workflow1, prevStepDefine, prevStep, newStep) =>
                 {
@@ -6003,15 +6005,27 @@ public class OrderController : BaseController
                     await validator.ValidateAndThrowAsync(stepAssignInfo, HttpContext.RequestAborted);
 
                     newStep.Assign(stepAssignInfo);
-
-                    if (dto.BusinessType == EBusinessType.Send)
-                    {
-                        await _orderRepository.Updateable().SetColumns(o => new Orders.Order()
-                        { CenterToOrgHandlerId = stepAssignInfo.UserId, CenterToOrgHandlerName = stepAssignInfo.Username })
-                            .Where(o => o.Id == order.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
-                    }
                 },
                 HttpContext.RequestAborted);
+            
+            if (string.IsNullOrEmpty(currentStep?.HandlerOrgId))
+            {
+                model.OrgId = currentStep.HandlerOrgId;
+                model.OrgName = currentStep.HandlerOrgName;
+                model.StepName = currentStep.Name;
+                model.StepCode = currentStep.Code;
+            }
+
+            if (_appOptions.Value.IsZiGong && dto.BusinessType == EBusinessType.Send)
+            {
+                model.NextHandlers = new List<StepAssignInfo> { newStep.GetWorkflowStepHandler() };
+            }
+
+            if (dto.BusinessType == EBusinessType.Send)
+            {
+                order.CenterToOrgHandlerId = newStep.HandlerId;
+                order.CenterToOrgHandlerName = newStep.HandlerName;
+            }
 
             if (order.Status >= EOrderStatus.Filed)
             {
@@ -6069,6 +6083,8 @@ public class OrderController : BaseController
             await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { Status = EOrderStatus.SpecialAudit })
                 .Where(o => o.Id == order.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
         }
+        
+        await _orderSpecialRepository.AddAsync(model, HttpContext.RequestAborted);
     }
 
     /// <summary>

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

@@ -363,7 +363,7 @@ namespace Hotline.FlowEngine.Workflows
                     dto.NextHandlers = new List<StepAssignInfo> { handler };
                 }
                 //需求:按角色选择办理人可以不选,表示该角色下所有人都可以办理,同时依据配置:是否本部门人办理显示待选办理人。角色下只要一人办理即可(即:角色下不发起会签)
-                else if (nextStepDefine.StepType != EStepType.End && nextStepDefine.HandlerType == EHandlerType.Role)
+                else if (nextStepDefine.HandlerType == EHandlerType.Role)
                 {
                     var handler = nextStepDefine.HandlerTypeItems.First();
                     if (nextStepDefine.BusinessType is EBusinessType.DepartmentLeader)
@@ -395,7 +395,7 @@ namespace Hotline.FlowEngine.Workflows
                 }
             }
 
-            if (!dto.NextHandlers.Any())
+            if (!dto.NextHandlers.Any() && nextStepDefine.StepType != EStepType.End)
                 throw new UserFriendlyException("未指定节点处理者");