xf 2 maanden geleden
bovenliggende
commit
29333eb6ce

+ 34 - 21
src/Hotline.Api/Controllers/OrderController.cs

@@ -5165,16 +5165,16 @@ public class OrderController : BaseController
         audit.InitId();
         if (dto.Files.Any())
             audit.FileJson = await _fileRepository.AddFileAsync(dto.Files, audit.Id, "", HttpContext.RequestAborted);
-        if (_appOptions.Value.IsZiGong && prevStep.BusinessType == EBusinessType.Send)
-        {
-            // 平均派单
-            var averageSendOrder = bool.Parse(_systemSettingCacheManager.GetSetting(SettingConstants.AverageSendOrder).SettingValue[0]);
-            if (averageSendOrder)
-            {
-                var handler = await _orderDomainService.AverageOrder(HttpContext.RequestAborted);
-                dto.Handler = handler;
-            }
-        }
+        // if (_appOptions.Value.IsZiGong && prevStep.BusinessType == EBusinessType.Send)
+        // {
+        //     // 平均派单
+        //     var averageSendOrder = bool.Parse(_systemSettingCacheManager.GetSetting(SettingConstants.AverageSendOrder).SettingValue[0]);
+        //     if (averageSendOrder)
+        //     {
+        //         var handler = await _orderDomainService.AverageOrder(HttpContext.RequestAborted);
+        //         dto.Handler = handler;
+        //     }
+        // }
 
         //todo 需整理各个地市退回业务的需求(指派类型及指派对象)
         //if (workflow.FlowType == EFlowType.Handle) //该逻辑需放在退回操作前依据业务判断
@@ -5224,17 +5224,20 @@ public class OrderController : BaseController
                 // }
 
                 var flowDirection = await _workflowApplication.PreviousAsync(dto,
-                    async (workflow, prevStepDefine, prevStep1, newStep) =>
+                    async (workflow1, prevStepDefine, prevStep1, newStep) =>
                     {
-                        var stepAssignInfo = _orderApplication.GetOrderPreviousAssignInfo(workflow, prevStepDefine, prevStep1);
+                        var stepAssignInfo =
+                            await _orderApplication.GetOrderPreviousAssignInfoAsync(workflow1, prevStepDefine, prevStep1, HttpContext.RequestAborted);
+                        if (stepAssignInfo is null) return;
                         var validator = new StepAssignInfoValidator();
                         await validator.ValidateAndThrowAsync(stepAssignInfo);
-                        if (prevStep1.BusinessType == EBusinessType.Send && dto.Handler != null)
+                        if (prevStep1.BusinessType == EBusinessType.Send)
                         {
-                            await _orderRepository.Updateable().SetColumns(o => new Orders.Order()
+                            await _orderRepository.Updateable().SetColumns(o => new Order()
                                     { CenterToOrgHandlerId = stepAssignInfo.UserId, CenterToOrgHandlerName = stepAssignInfo.Username })
                                 .Where(o => o.Id == order.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
                         }
+
                         newStep.Assign(stepAssignInfo);
                     },
                     HttpContext.RequestAborted);
@@ -5261,17 +5264,20 @@ public class OrderController : BaseController
             // }
 
             var flowDirection = await _workflowApplication.PreviousAsync(dto,
-                async (workflow, prevStepDefine, prevStep1, newStep) =>
+                async (workflow1, prevStepDefine, prevStep1, newStep) =>
                 {
-                    var stepAssignInfo = _orderApplication.GetOrderPreviousAssignInfo(workflow, prevStepDefine, prevStep1);
+                    var stepAssignInfo =
+                        await _orderApplication.GetOrderPreviousAssignInfoAsync(workflow1, prevStepDefine, prevStep1, HttpContext.RequestAborted);
+                    if (stepAssignInfo is null) return;
                     var validator = new StepAssignInfoValidator();
                     await validator.ValidateAndThrowAsync(stepAssignInfo);
-                    if (prevStep1.BusinessType == EBusinessType.Send && dto.Handler != null)
+                    if (prevStep1.BusinessType == EBusinessType.Send)
                     {
-                        await _orderRepository.Updateable().SetColumns(o => new Orders.Order()
+                        await _orderRepository.Updateable().SetColumns(o => new Order()
                                 { CenterToOrgHandlerId = stepAssignInfo.UserId, CenterToOrgHandlerName = stepAssignInfo.Username })
                             .Where(o => o.Id == order.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
                     }
+
                     newStep.Assign(stepAssignInfo);
                 },
                 HttpContext.RequestAborted);
@@ -5889,10 +5895,17 @@ public class OrderController : BaseController
                 stepAssignInfo.FlowAssignType = EFlowAssignType.User;
             }
 
-            var reverseFlowStepAssignInfo = _orderDomainService.GetOrderRecallAssignInfo(dto.BusinessType, stepAssignInfo);
-            await _workflowDomainService.RecallAsync(recall, reverseFlowStepAssignInfo, EWorkflowTraceType.Recall,
+            await _workflowDomainService.RecallAsync(recall, null, EWorkflowTraceType.Recall,
                 expiredTime.ExpiredTime, order.Status >= EOrderStatus.Filed, EHandleMode.Recall,
-                cancellationToken: HttpContext.RequestAborted);
+                async (workflow1, prevStepDefine, prevStep, newStep) =>
+                {
+                    var stepAssignInfo =
+                        await _orderApplication.GetOrderRecallAssignInfoAsync(workflow1, prevStepDefine, prevStep1, HttpContext.RequestAborted);
+                    if (stepAssignInfo is null) return;
+                    var validator = new StepAssignInfoValidator();
+                    await validator.ValidateAndThrowAsync(stepAssignInfo);
+                },
+                HttpContext.RequestAborted);
 
             if (order.Status >= EOrderStatus.Filed)
             {

+ 16 - 9
src/Hotline.Application/Orders/IOrderApplication.cs

@@ -18,7 +18,6 @@ namespace Hotline.Application.Orders
 {
     public interface IOrderApplication
     {
-
         /// <summary>
         /// 派单量统计
         /// </summary>
@@ -56,6 +55,7 @@ namespace Hotline.Application.Orders
         //Task<PagedDto<WorkflowOrderDto>> GetAboutToExpireNodeAsync(AboutToExpireListDto dto, CancellationToken cancellationToken);
         Task OrderParticiple(string inputStr, string orderId, string no, string title, DateTime time, CancellationToken cancellationToken);
         Task OrderSensitiveParticiple(string inputStr, string orderId, CancellationToken cancellationToken);
+
         /// <summary>
         /// 接收外部平台工单
         /// </summary>
@@ -158,7 +158,7 @@ namespace Hotline.Application.Orders
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
-		ISugarQueryable<Order> QueryOrgDataListDetail(OrgDataListDetailRequest dto);
+        ISugarQueryable<Order> QueryOrgDataListDetail(OrgDataListDetailRequest dto);
 
         /// <summary>
         /// 部门全量超期统计明细
@@ -283,13 +283,13 @@ namespace Hotline.Application.Orders
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
-		ISugarQueryable<OrderCenterAcceptVo> OrderCenterAccept(OrderCenterAcceptPagedRequest dto);
+        ISugarQueryable<OrderCenterAcceptVo> OrderCenterAccept(OrderCenterAcceptPagedRequest dto);
 
         /// <summary>
         /// 中心受理统计(值班坐席)
         /// </summary>
         /// <returns></returns>
-		ISugarQueryable<OrderCenterAcceptUserVo> OrderCenterAcceptUser(OrderCenterAcceptPagedRequest dto);
+        ISugarQueryable<OrderCenterAcceptUserVo> OrderCenterAcceptUser(OrderCenterAcceptPagedRequest dto);
 
         /// <summary>
         /// 扭转信件统计
@@ -325,11 +325,11 @@ namespace Hotline.Application.Orders
         /// <param name="dto"></param>
         /// <returns></returns>
         ISugarQueryable<OrderVisitDetail> MayScreenList(MayScreenListDto dto);
-        
+
         ISugarQueryable<Order> QueryWaitedForSeat(QueryOrderWaitedDto dto);
-        
+
         ISugarQueryable<Order> QueryWaited(QueryOrderWaitedDto dto);
-        
+
         /// <summary>
         /// 受理类型前10
         /// </summary>
@@ -407,10 +407,17 @@ namespace Hotline.Application.Orders
         /// </summary>
         /// <returns></returns>
         Task HandleFromWanggeyuanToMaskAsync(string orderId, CancellationToken cancellation);
-        
+
         /// <summary>
         /// 查询退回操作目标节点的指派对象
         /// </summary>
-        StepAssignInfo GetOrderPreviousAssignInfo(Workflow workflow, StepDefine prevStepDefine, WorkflowStep prevStep);
+        Task<StepAssignInfo?> GetOrderPreviousAssignInfoAsync(Workflow workflow, StepDefine prevStepDefine, WorkflowStep prevStep,
+            CancellationToken cancellationToken);
+        
+        /// <summary>
+        /// 查询特提操作目标节点的指派对象
+        /// </summary>
+        Task<StepAssignInfo?> GetOrderRecallAssignInfoAsync(Workflow workflow, StepDefine prevStepDefine, WorkflowStep prevStep,
+            RecallDto dto, CancellationToken cancellationToken);
     }
 }

+ 286 - 20
src/Hotline.Application/Orders/OrderApplication.cs

@@ -3553,7 +3553,8 @@ public class OrderApplication : IOrderApplication, IScopeDependency
     /// <summary>
     /// 查询退回操作目标节点的指派对象
     /// </summary>
-    public StepAssignInfo GetOrderPreviousAssignInfo(Workflow workflow, StepDefine prevStepDefine, WorkflowStep prevStep)
+    public async Task<StepAssignInfo?> GetOrderPreviousAssignInfoAsync(Workflow workflow, StepDefine prevStepDefine, WorkflowStep prevStep,
+        CancellationToken cancellationToken)
     {
         //自贡需求:
         // 1. 工单退回、特提、重办到话务部节点时,所有坐席都可以查看和办理
@@ -3573,40 +3574,305 @@ public class OrderApplication : IOrderApplication, IScopeDependency
            2.1、退回到话务部节点,只有之前受理人才能办理;
            2.2、退回到派单组或者班长审批等其它热线中心节点,只有之前办理人才能办理
          */
-        var rsp = new ReverseFlowStepAssignInfo(EReverseFlowStepCreationPolicy.OriginStepUser);
 
-        switch (targetStepBusinessType)
+
+        StepAssignInfo? rsp = null;
+        switch (_appOptions.Value.AppScope)
         {
-            case EBusinessType.Seat:
-                if (_appOptions.Value.IsZiGong || _appOptions.Value.IsYiBin)
+            case AppDefaults.AppScope.YiBin:
+                switch (prevStepDefine.BusinessType)
                 {
-                    rsp.ReverseFlowStepCreationPolicy = EReverseFlowStepCreationPolicy.OriginDefinition;
+                    case EBusinessType.Seat:
+                        var define = prevStepDefine.HandlerTypeItems.First();
+                        rsp = new StepAssignInfo
+                        {
+                            FlowAssignType = EFlowAssignType.Role,
+                            RoleId = define.Key,
+                            RoleName = define.Value,
+                            Key = define.Key,
+                            Value = define.Value,
+                        };
+                        break;
+                    case EBusinessType.Send:
+                        break;
+                    case EBusinessType.Department:
+                        rsp = new StepAssignInfo
+                        {
+                            FlowAssignType = EFlowAssignType.Org,
+                            OrgId = prevStep.HandlerOrgId,
+                            OrgName = prevStep.HandlerOrgName,
+                            Key = prevStep.HandlerOrgId,
+                            Value = prevStep.HandlerOrgName,
+                        };
+                        break;
+                    case EBusinessType.DepartmentLeader:
+                        break;
+                    case EBusinessType.CenterMonitor:
+                        break;
+                    case EBusinessType.CenterLeader:
+                        break;
+                    case EBusinessType.File:
+                    case EBusinessType.Unknown:
+                    case EBusinessType.Publish:
+                    case EBusinessType.Visit:
+                    case EBusinessType.TrashEnd:
+                    default:
+                        throw new ArgumentOutOfRangeException();
                 }
+
                 break;
-            case EBusinessType.Send:
-                if (_appOptions.Value.IsZiGong)
+            case AppDefaults.AppScope.ZiGong:
+                switch (prevStepDefine.BusinessType)
                 {
-                    if (handler is null)
-                        throw new UserFriendlyException("参数异常,退回派单组需要通过平均派单指定办理人");
+                    case EBusinessType.Seat:
+                        var define = prevStepDefine.HandlerTypeItems.First();
+                        rsp = new StepAssignInfo
+                        {
+                            FlowAssignType = EFlowAssignType.Role,
+                            RoleId = define.Key,
+                            RoleName = define.Value,
+                            Key = define.Key,
+                            Value = define.Value,
+                        };
+                        break;
+                    case EBusinessType.Send:
+                        // 平均派单
+                        var averageSendOrder = bool.Parse(_systemSettingCacheManager.GetSetting(SettingConstants.AverageSendOrder).SettingValue[0]);
+                        if (averageSendOrder)
+                            rsp = await _orderDomainService.AverageOrder(cancellationToken);
+                        break;
+                    case EBusinessType.Department:
+                        rsp = new StepAssignInfo
+                        {
+                            FlowAssignType = EFlowAssignType.Org,
+                            OrgId = prevStep.HandlerOrgId,
+                            OrgName = prevStep.HandlerOrgName,
+                            Key = prevStep.HandlerOrgId,
+                            Value = prevStep.HandlerOrgName,
+                        };
+                        break;
+                    case EBusinessType.DepartmentLeader:
+                        break;
+                    case EBusinessType.CenterMonitor:
+                        break;
+                    case EBusinessType.CenterLeader:
+                        break;
+                    case EBusinessType.File:
+                    case EBusinessType.Unknown:
+                    case EBusinessType.Publish:
+                    case EBusinessType.Visit:
+                    case EBusinessType.TrashEnd:
+                    default:
+                        throw new ArgumentOutOfRangeException();
+                }
 
-                    rsp.ReverseFlowStepCreationPolicy = EReverseFlowStepCreationPolicy.AssignHandler;
-                    rsp.StepAssignInfo = handler;
+                break;
+            case AppDefaults.AppScope.LuZhou:
+                switch (prevStepDefine.BusinessType)
+                {
+                    case EBusinessType.Seat:
+                        break;
+                    case EBusinessType.Send:
+                        break;
+                    case EBusinessType.Department:
+                        rsp = new StepAssignInfo
+                        {
+                            FlowAssignType = EFlowAssignType.Org,
+                            OrgId = prevStep.HandlerOrgId,
+                            OrgName = prevStep.HandlerOrgName,
+                            Key = prevStep.HandlerOrgId,
+                            Value = prevStep.HandlerOrgName,
+                        };
+                        break;
+                    case EBusinessType.DepartmentLeader:
+                        break;
+                    case EBusinessType.CenterMonitor:
+                        break;
+                    case EBusinessType.CenterLeader:
+                        break;
+                    case EBusinessType.File:
+                    case EBusinessType.Unknown:
+                    case EBusinessType.Publish:
+                    case EBusinessType.Visit:
+                    case EBusinessType.TrashEnd:
+                    default:
+                        throw new ArgumentOutOfRangeException();
                 }
+
+                break;
+            default:
+                throw new ArgumentOutOfRangeException();
+        }
+
+        return rsp;
+    }
+
+    /// <summary>
+    /// 查询特提操作目标节点的指派对象
+    /// </summary>
+    public async Task<StepAssignInfo> GetOrderRecallAssignInfoAsync(Workflow workflow, StepDefine prevStepDefine, WorkflowStep prevStep,
+        RecallDto dto, CancellationToken cancellationToken)
+    {
+        //自贡需求:
+        // 1. 工单退回、特提、重办到话务部节点时,所有坐席都可以查看和办理
+        // 2. 退回到派单组时需执行平均分配逻辑
+        //宜宾需求:
+        // 1、退回至话务部:所有坐席都可以查看和办理(除某些场景下本来就需指定办理对象,如:发布时退回……)
+        // 2、退回至派单组:默认退给之前的派单员(除某些场景下本来就需指定办理对象,如:发布时退回……)
+        // 3、话务员特提至话务部:根据特提申请时候选择来,指定的办理对象才能查看和办理
+        // 4、派单员特提至派单组:根据特提申请时候选择来,指定的办理对象才能查看和办理
+        // 5、班长特提至派单组,办理对象必选(已实现)
+        // 6、班长特提至话务部,办理对象非必选,没选择则所有坐席都可以查看和办理
+        //泸州需求:
+        /* 1、特提(仅针对特提到热线中心节点)
+           1.1、工单特提回话务部,办理对象需调整所有坐席都可以查看和办理
+           1.2、工单特提到派单组或者班长审批等其它热线中心节点,只有之前办理人才能办理
+           2、退回功能(仅针对退回到热线中心节点)
+           2.1、退回到话务部节点,只有之前受理人才能办理;
+           2.2、退回到派单组或者班长审批等其它热线中心节点,只有之前办理人才能办理
+         */
+
+        StepAssignInfo rsp;
+        switch (prevStepDefine.HandlerType)
+        {
+            case EHandlerType.Role:
                 break;
-            case EBusinessType.Department:
-                rsp.ReverseFlowStepCreationPolicy = EReverseFlowStepCreationPolicy.OriginStepOrg;
+            case EHandlerType.OrgLevel:
                 break;
-            case EBusinessType.DepartmentLeader:
+            case EHandlerType.OrgType:
                 break;
-            case EBusinessType.CenterMonitor:
+            case EHandlerType.AssignedUser:
                 break;
-            case EBusinessType.CenterLeader:
+            case EHandlerType.AssignedOrg:
                 break;
-            case EBusinessType.Unknown:
+            default:
+                throw new ArgumentOutOfRangeException();
+        }
+        
+        switch (_appOptions.Value.AppScope)
+        {
+            case AppDefaults.AppScope.YiBin:
+                switch (prevStepDefine.BusinessType)
+                {
+                    case EBusinessType.Seat:
+                        rsp = new StepAssignInfo
+                        {
+                            FlowAssignType = EFlowAssignType.Role,
+                            RoleId = define.Key,
+                            RoleName = define.Value,
+                            Key = define.Key,
+                            Value = define.Value,
+                        };
+                        break;
+                    case EBusinessType.Send:
+                        break;
+                    case EBusinessType.Department:
+                        rsp = new StepAssignInfo
+                        {
+                            FlowAssignType = EFlowAssignType.Org,
+                            OrgId = prevStep.HandlerOrgId,
+                            OrgName = prevStep.HandlerOrgName,
+                            Key = prevStep.HandlerOrgId,
+                            Value = prevStep.HandlerOrgName,
+                        };
+                        break;
+                    case EBusinessType.DepartmentLeader:
+                        break;
+                    case EBusinessType.CenterMonitor:
+                        break;
+                    case EBusinessType.CenterLeader:
+                        break;
+                    case EBusinessType.File:
+                    case EBusinessType.Unknown:
+                    case EBusinessType.Publish:
+                    case EBusinessType.Visit:
+                    case EBusinessType.TrashEnd:
+                    default:
+                        throw new ArgumentOutOfRangeException();
+                }
+
+                break;
+            case AppDefaults.AppScope.ZiGong:
+                switch (prevStepDefine.BusinessType)
+                {
+                    case EBusinessType.Seat:
+                        var define = prevStepDefine.HandlerTypeItems.First();
+                        rsp = new StepAssignInfo
+                        {
+                            FlowAssignType = EFlowAssignType.Role,
+                            RoleId = define.Key,
+                            RoleName = define.Value,
+                            Key = define.Key,
+                            Value = define.Value,
+                        };
+                        break;
+                    case EBusinessType.Send:
+                        // 平均派单
+                        var averageSendOrder = bool.Parse(_systemSettingCacheManager.GetSetting(SettingConstants.AverageSendOrder).SettingValue[0]);
+                        if (averageSendOrder)
+                            rsp = await _orderDomainService.AverageOrder(cancellationToken);
+                        break;
+                    case EBusinessType.Department:
+                        rsp = new StepAssignInfo
+                        {
+                            FlowAssignType = EFlowAssignType.Org,
+                            OrgId = prevStep.HandlerOrgId,
+                            OrgName = prevStep.HandlerOrgName,
+                            Key = prevStep.HandlerOrgId,
+                            Value = prevStep.HandlerOrgName,
+                        };
+                        break;
+                    case EBusinessType.DepartmentLeader:
+                        break;
+                    case EBusinessType.CenterMonitor:
+                        break;
+                    case EBusinessType.CenterLeader:
+                        break;
+                    case EBusinessType.File:
+                    case EBusinessType.Unknown:
+                    case EBusinessType.Publish:
+                    case EBusinessType.Visit:
+                    case EBusinessType.TrashEnd:
+                    default:
+                        throw new ArgumentOutOfRangeException();
+                }
+
+                break;
+            case AppDefaults.AppScope.LuZhou:
+                switch (prevStepDefine.BusinessType)
+                {
+                    case EBusinessType.Seat:
+                        break;
+                    case EBusinessType.Send:
+                        break;
+                    case EBusinessType.Department:
+                        rsp = new StepAssignInfo
+                        {
+                            FlowAssignType = EFlowAssignType.Org,
+                            OrgId = prevStep.HandlerOrgId,
+                            OrgName = prevStep.HandlerOrgName,
+                            Key = prevStep.HandlerOrgId,
+                            Value = prevStep.HandlerOrgName,
+                        };
+                        break;
+                    case EBusinessType.DepartmentLeader:
+                        break;
+                    case EBusinessType.CenterMonitor:
+                        break;
+                    case EBusinessType.CenterLeader:
+                        break;
+                    case EBusinessType.File:
+                    case EBusinessType.Unknown:
+                    case EBusinessType.Publish:
+                    case EBusinessType.Visit:
+                    case EBusinessType.TrashEnd:
+                    default:
+                        throw new ArgumentOutOfRangeException();
+                }
+
                 break;
-            case EBusinessType.File:
             default:
-                throw new ArgumentOutOfRangeException(nameof(targetStepBusinessType), targetStepBusinessType, null);
+                throw new ArgumentOutOfRangeException();
         }
 
         return rsp;

+ 1 - 1
src/Hotline/Orders/IOrderDomainService.cs

@@ -70,7 +70,7 @@ namespace Hotline.Orders
         /// 平均派单
         /// </summary>
         /// <returns></returns>
-        Task<FlowStepHandler> AverageOrder(CancellationToken cancellationToken);
+        Task<StepAssignInfo> AverageOrder(CancellationToken cancellationToken);
 
         /// <summary>
         /// 登录平均派单

+ 7 - 5
src/Hotline/Orders/OrderDomainService.cs

@@ -666,7 +666,7 @@ public class OrderDomainService : IOrderDomainService, IScopeDependency
     /// 平均派单
     /// </summary>
     /// <returns></returns>
-    public async Task<FlowStepHandler> AverageOrder(CancellationToken cancellationToken)
+    public async Task<StepAssignInfo> AverageOrder(CancellationToken cancellationToken)
     {
         var time = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd"));
         var scheduling = await _schedulingRepository.Queryable().Includes(x => x.SchedulingUser)
@@ -675,7 +675,7 @@ public class OrderDomainService : IOrderDomainService, IScopeDependency
         var centerOrgName = _systemSettingCacheManager.GetSetting(SettingConstants.CenterOrgName)?.SettingValue[0];
         var roleId = _systemSettingCacheManager.GetSetting(SettingConstants.RolePaiDan)?.SettingValue[0];
         if (scheduling is null)
-            return new FlowStepHandler
+            return new StepAssignInfo
             {
                 Key = AppDefaults.SendPoolId,
                 Value = "待派单池",
@@ -684,12 +684,13 @@ public class OrderDomainService : IOrderDomainService, IScopeDependency
                 OrgId = OrgSeedData.CenterId,
                 OrgName = centerOrgName,
                 RoleId = roleId,
-                RoleName = "派单员"
+                RoleName = "派单员",
+                FlowAssignType = EFlowAssignType.User,
             };
         scheduling.SendOrderNum++;
         await _schedulingRepository.UpdateAsync(scheduling, cancellationToken);
         var user = scheduling.SchedulingUser;
-        return new FlowStepHandler
+        return new StepAssignInfo
         {
             Key = user.UserId,
             Value = user.UserName,
@@ -698,7 +699,8 @@ public class OrderDomainService : IOrderDomainService, IScopeDependency
             OrgId = user.OrgId,
             OrgName = user.OrgIdName,
             RoleId = roleId,
-            RoleName = "派单员"
+            RoleName = "派单员",
+            FlowAssignType = EFlowAssignType.User,
         };
     }