浏览代码

fixed: 退回审批异常

xf 1 年之前
父节点
当前提交
993737e3db

+ 1 - 1
src/Hotline.Api/Controllers/OrderController.cs

@@ -2755,7 +2755,7 @@ public class OrderController : BaseController
         //执行退回
         if (sendBack.State == ESendBackAuditState.End)
         {
-            await _workflowApplication.OrderPreviousAsync(sendBack.SendBackData, sendBack.WorkflowUserId, HttpContext.RequestAborted);
+            await _workflowApplication.PreviousAsync(sendBack.SendBackData, sendBack.WorkflowUserId, HttpContext.RequestAborted);
             //发送短信TODO
 
         }

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

@@ -35,7 +35,7 @@ namespace Hotline.Application.FlowEngine
         /// <summary>
         /// 工单退回(返回前一节点)
         /// </summary>
-        Task OrderPreviousAsync(PreviousWorkflowDto dto, string userId, CancellationToken cancellationToken);
+        Task PreviousAsync(PreviousWorkflowDto dto, string userId, CancellationToken cancellationToken);
 
         /// <summary>
         /// 撤回至任意节点

+ 7 - 4
src/Hotline.Application/FlowEngine/WorkflowApplication.cs

@@ -260,19 +260,22 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
     {
         var workflow = await _workflowDomainService.GetWorkflowAsync(dto.WorkflowId, withSteps: true,
             withCountersigns: true, cancellationToken: cancellationToken);
-        User user = await _userRepository.Queryable().Includes(x => x.Organization)
-            .Where(x => x.Id == _sessionContext.RequiredUserId).FirstAsync();
+        var user = await _userRepository.Queryable()
+            .Includes(x => x.Organization)
+            .FirstAsync(x => x.Id == _sessionContext.RequiredUserId, cancellationToken);
         await _workflowDomainService.PreviousAsync(workflow, dto, user, cancellationToken);
     }
 
     /// <summary>
     /// 工单退回(返回前一节点)
     /// </summary>
-    public async Task OrderPreviousAsync(PreviousWorkflowDto dto, string userId, CancellationToken cancellationToken)
+    public async Task PreviousAsync(PreviousWorkflowDto dto, string userId, CancellationToken cancellationToken)
     {
         var workflow = await _workflowDomainService.GetWorkflowAsync(dto.WorkflowId, withSteps: true,
            withCountersigns: true, cancellationToken: cancellationToken);
-        User user = await _userRepository.Queryable().Includes(x => x.Organization).Where(x => x.Id == userId).FirstAsync();
+        var user = await _userRepository.Queryable()
+            .Includes(x => x.Organization)
+            .FirstAsync(x => x.Id == userId, cancellationToken);
         await _workflowDomainService.PreviousAsync(workflow, dto, user, cancellationToken);
     }
 

+ 35 - 19
src/Hotline.Application/Handlers/FlowEngine/WorkflowPreviousHandler.cs

@@ -101,28 +101,44 @@ namespace Hotline.Application.Handlers.FlowEngine
                     //    //        e.Message);
                     //    //}
                     //}
-                    try
+
+                    var targetStep = notification.TargetStep;
+                    switch (targetStep.HandlerType)
                     {
-                        var user = await _userRepository.GetAsync(notification.TargetStep.HandlerId);
-                        if (!string.IsNullOrEmpty(user.PhoneNo))
-                        {
-                            var messageDto = new MessageDto()
+                        case EHandlerType.Role:
+                        case EHandlerType.AssignedUser:
+                            var users = await _userRepository.Queryable()
+                                .Where(d => targetStep.Handlers.Select(x => x.Key).Contains(d.Id))
+                                .ToListAsync(cancellationToken);
+                            foreach (var user in users)
                             {
-                                PushBusiness = EPushBusiness.OrderCallback,
-                                ExternalId = order.Id,
-                                OrderId = order.Id,
-                                PushPlatform = EPushPlatform.Sms,
-                                Remark = order.Title,
-                                Name = user.PhoneNo,
-                                TemplateCode = "1004",
-                                Params = new List<string>() { order.No },
-                                TelNumber = user.PhoneNo,
-
-                            };
-                            await _mediator.Publish(new PushMessageNotify(messageDto), cancellationToken);
-                        }
+                                if (!string.IsNullOrEmpty(user.PhoneNo))
+                                {
+                                    var messageDto = new MessageDto()
+                                    {
+                                        PushBusiness = EPushBusiness.OrderCallback,
+                                        ExternalId = order.Id,
+                                        OrderId = order.Id,
+                                        PushPlatform = EPushPlatform.Sms,
+                                        Remark = order.Title,
+                                        Name = user.PhoneNo,
+                                        TemplateCode = "1004",
+                                        Params = new List<string>() { order.No },
+                                        TelNumber = user.PhoneNo,
+                                    };
+                                    await _mediator.Publish(new PushMessageNotify(messageDto), cancellationToken);
+                                }
+                            }
+                            break;
+                        case EHandlerType.OrgLevel:
+                        case EHandlerType.OrgType:
+                        case EHandlerType.AssignedOrg:
+                            //todo 部门经办人联系方式
+                            break;
+                        default:
+                            throw new ArgumentOutOfRangeException();
                     }
-                    catch { }
+
                     break;
                 case WorkflowModuleConsts.OrderDelay:
                     var delay = await _orderDelayRepository.GetAsync(workflow.ExternalId, cancellationToken);

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

@@ -581,7 +581,7 @@ namespace Hotline.FlowEngine.Workflows
             if (prevStep == null)
                 throw UserFriendlyException.SameMessage("未查询到前一节点");
 
-            if (prevStep.IsTopCountersignEndStep(workflow.TopCountersignStepId))
+            if (workflow.IsInCountersign && prevStep.IsTopCountersignEndStep(workflow.TopCountersignStepId))
             {
                 countersignStartStep = workflow.Steps.FirstOrDefault(d => d.Id == prevStep.CountersignStartStepId);
                 if (countersignStartStep is null)