Ver Fonte

重构BatchAuditDelay

xfe há 3 semanas atrás
pai
commit
65a6d1a582

+ 180 - 100
src/Hotline.Api/Controllers/OrderController.cs

@@ -423,10 +423,10 @@ public class OrderController : BaseController
             .WhereIF(!string.IsNullOrEmpty(dto.AcceptType), d => d.AcceptTypeCode == dto.AcceptType) //受理类型
             .WhereIF(!string.IsNullOrEmpty(dto.Hotspot), d => d.HotspotSpliceName != null && d.HotspotSpliceName.Contains(dto.Hotspot))
             .WhereIF(!string.IsNullOrEmpty(dto.FromPhone), d => d.FromPhone == dto.FromPhone) //来电号码
-                                                                                              //.WhereIF(!string.IsNullOrEmpty(dto.PubMan),
-                                                                                              //    d => d.AcceptorName.Contains(dto.PubMan!) || d.AcceptorStaffNo.Contains(dto.PubMan!))
-                                                                                              //.WhereIF(dto.PubRange == EPublicState.Pub, d => d.OrderPublish.PublishState)
-                                                                                              //.WhereIF(dto.PubRange == EPublicState.NoPub, d => !d.OrderPublish.PublishState)
+            //.WhereIF(!string.IsNullOrEmpty(dto.PubMan),
+            //    d => d.AcceptorName.Contains(dto.PubMan!) || d.AcceptorStaffNo.Contains(dto.PubMan!))
+            //.WhereIF(dto.PubRange == EPublicState.Pub, d => d.OrderPublish.PublishState)
+            //.WhereIF(dto.PubRange == EPublicState.NoPub, d => !d.OrderPublish.PublishState)
             .WhereIF(dto.IsProvinceOrder.HasValue && dto.IsProvinceOrder == true, d => d.Source == ESource.ProvinceStraight)
             .WhereIF(dto.IsProvinceOrder.HasValue && dto.IsProvinceOrder == false, d => d.Source != ESource.ProvinceStraight)
             .WhereIF(dto.FiledType != null && dto.FiledType == FiledType.CenterFiled, d => d.ProcessType == EProcessType.Zhiban)
@@ -593,6 +593,7 @@ public class OrderController : BaseController
         {
             orderVisit.EmployeeId = _sessionContext.RequiredUserId;
         }
+
         var isReturn = false;
         if (_appOptions.Value.IsZiGong)
         {
@@ -602,6 +603,7 @@ public class OrderController : BaseController
             if (callNative == EVoiceEvaluate.NoSatisfied || callNative == EVoiceEvaluate.VeryNoSatisfied)
                 isReturn = true;
         }
+
         if (isReturn == false)
         {
             if (order is { FileOrgIsCenter: true, CounterSignType: null } && !order.IsProvince)
@@ -624,6 +626,7 @@ public class OrderController : BaseController
                 orderVisit.IsCanAiVisit = true;
             }
         }
+
         string visitId = await _orderVisitRepository.AddAsync(orderVisit);
         await _orderSnapshotApplication.UpdateLabelAsync(order.Id, dto.SnapshotLabels);
 
@@ -650,8 +653,10 @@ public class OrderController : BaseController
                     //orgDetail.OrgHandledAttitude = satisfy;
                 }
             }
+
             visitedDetail.Add(orgDetail);
         }
+
         if (isReturn == false)
         {
             if (order is { FileOrgIsCenter: true, CounterSignType: null, IsProvince: false })
@@ -663,6 +668,7 @@ public class OrderController : BaseController
                 await _orderRepository.UpdateAsync(order, HttpContext.RequestAborted);
             }
         }
+
         visitedDetail.Add(seatDetail);
         await _orderVisitedDetailRepository.AddRangeAsync(visitedDetail, HttpContext.RequestAborted);
 
@@ -715,7 +721,8 @@ public class OrderController : BaseController
 
                         var code = "";
                         //受理类型为“投诉、举报”
-                        if ((order.AcceptTypeCode == "30" || order.AcceptTypeCode == "35") && orderVisit.VisitState != EVisitState.Visited && isOpenSendVisitSms == "true")
+                        if ((order.AcceptTypeCode == "30" || order.AcceptTypeCode == "35") && orderVisit.VisitState != EVisitState.Visited &&
+                            isOpenSendVisitSms == "true")
                         {
                             code = "1017";
                             orderVisit.VisitState = EVisitState.SMSVisiting;
@@ -1130,7 +1137,8 @@ public class OrderController : BaseController
         if (listCopyData != null && listCopyData.Any())
         {
             //修改数据
-            var list = await _orderVisitDetailCopyRepository.Queryable().Where(p => p.BacthId == listCopyData[0].BacthId).OrderBy(p => p.VisitTarget).ToListAsync();
+            var list = await _orderVisitDetailCopyRepository.Queryable().Where(p => p.BacthId == listCopyData[0].BacthId).OrderBy(p => p.VisitTarget)
+                .ToListAsync();
             if (list != null && list.Any())
             {
                 var orderVisitDetailCopyDtos = new List<OrderVisitDetailDto>();
@@ -1138,6 +1146,7 @@ public class OrderController : BaseController
                 {
                     orderVisitDetailCopyDtos.Add(_mapper.Map<OrderVisitDetailDto>(item));
                 }
+
                 data.OrderVisitDetailCopyDtos = orderVisitDetailCopyDtos;
                 data.CreatorName = list[0].CreatorName;
                 data.CreationTime = list[0].CreationTime;
@@ -1152,6 +1161,7 @@ public class OrderController : BaseController
                 {
                     orderVisitDetailDtos.Add(_mapper.Map<OrderVisitDetailDto>(item));
                 }
+
                 data.OrderVisitDetailDtos = orderVisitDetailDtos;
             }
         }
@@ -1426,8 +1436,10 @@ public class OrderController : BaseController
                 rsp.OrderVisitModel.Order = rsp.OrderVisitModel.Order.DataMask(true);
             if (_appOptions.Value.IsLuZhou)
             {
-                rsp.OrderVisitModel.Order.FromPhone = "****";//rsp.OrderVisitModel.Order.FromPhone?.Replace(rsp.OrderVisitModel.Order.FromPhone.Substring(3, 4), "****");
-                rsp.OrderVisitModel.Order.Contact = "****"; //rsp.OrderVisitModel.Order.Contact?.Replace(rsp.OrderVisitModel.Order.Contact.Substring(3, 4), "****");
+                rsp.OrderVisitModel.Order.FromPhone =
+                    "****"; //rsp.OrderVisitModel.Order.FromPhone?.Replace(rsp.OrderVisitModel.Order.FromPhone.Substring(3, 4), "****");
+                rsp.OrderVisitModel.Order.Contact =
+                    "****"; //rsp.OrderVisitModel.Order.Contact?.Replace(rsp.OrderVisitModel.Order.Contact.Substring(3, 4), "****");
             }
         }
 
@@ -2109,7 +2121,8 @@ public class OrderController : BaseController
         if (dto.DelayNum < 1) throw UserFriendlyException.SameMessage("延期申请天数需大于等于1天!");
         var deday = await _orderDelayRepository.Queryable().Includes(x => x.Order).FirstAsync(x => x.Id == dto.Id, HttpContext.RequestAborted);
         if (_appOptions.Value.IsLuZhou && dto.DelayNum > deday.Order.TimeLimitCount) throw UserFriendlyException.SameMessage("申请天数需小于等于工单办理时限!");
-        await _orderDelayRepository.Updateable().SetColumns(x => new OrderDelay { DelayNum = dto.DelayNum }).Where(x => x.Id == dto.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
+        await _orderDelayRepository.Updateable().SetColumns(x => new OrderDelay { DelayNum = dto.DelayNum }).Where(x => x.Id == dto.Id)
+            .ExecuteCommandAsync(HttpContext.RequestAborted);
     }
 
     /// <summary>
@@ -2278,7 +2291,7 @@ public class OrderController : BaseController
                 var workflowEntuty = await _workflowDomainService.GetWorkflowAsync(workflow.WorkflowId, withDefine: true, withSteps: true,
                     cancellationToken: HttpContext.RequestAborted);
                 var currentStep = workflowEntuty.Steps.FirstOrDefault(d =>
-                        d.Status == EWorkflowStepStatus.WaitForAccept || d.Status == EWorkflowStepStatus.WaitForHandle);
+                    d.Status == EWorkflowStepStatus.WaitForAccept || d.Status == EWorkflowStepStatus.WaitForHandle);
 
                 NextStepsWithOpinionDto<NextStepOption> next = null;
 
@@ -2372,19 +2385,19 @@ public class OrderController : BaseController
             .ToListAsync(HttpContext.RequestAborted);
 
         var updateDelays = new List<OrderDelay>();
+        var updateOrders = new List<Order>();
         foreach (var delay in delays)
         {
             try
             {
-
                 var currentStep = delay.Workflow.Steps.FirstOrDefault(d =>
-                        d.Status == EWorkflowStepStatus.WaitForAccept || d.Status == EWorkflowStepStatus.WaitForHandle);
+                    d.Status == EWorkflowStepStatus.WaitForAccept || d.Status == EWorkflowStepStatus.WaitForHandle);
 
                 NextStepsWithOpinionDto<NextStepOption> next = null;
 
                 try
                 {
-                    next = await _workflowApplication.GetNextStepsAsync(delay.WorkflowId, HttpContext.RequestAborted);
+                    next = await _workflowApplication.GetNextStepsAsync(delay.Workflow, HttpContext.RequestAborted);
                 }
                 catch (UserFriendlyException e)
                 {
@@ -2437,7 +2450,8 @@ public class OrderController : BaseController
                     }
 
                     var expiredTimeConfig =
-                        await _expireTime.CalcEndTime(expiredTimeBase, startTime, new TimeConfig(delay.DelayNum, delay.DelayUnit), order.AcceptTypeCode);
+                        await _expireTime.CalcEndTime(expiredTimeBase, startTime, new TimeConfig(delay.DelayNum, delay.DelayUnit),
+                            order.AcceptTypeCode);
                     order.ExpiredTime = expiredTimeConfig.ExpiredTime;
                     order.NearlyExpiredTime = expiredTimeConfig.NearlyExpiredTime;
                     order.NearlyExpiredTimeOne = expiredTimeConfig.NearlyExpiredTimeOne;
@@ -2447,32 +2461,25 @@ public class OrderController : BaseController
                         order.ExpiredTimeProvince = expiredTimeConfig.ExpiredTime;
                     }
 
-                    if (string.IsNullOrEmpty(order.WorkflowId))
-                        throw new UserFriendlyException("该工单流程id异常");
-                    await _workflowDomainService.UpdateUnhandleExpiredTimeAsync(order.WorkflowId, expiredTimeConfig.ExpiredTime, cancellationToken);
+                    updateOrders.Add(order);
 
-                    await _orderRepository.UpdateAsync(order, cancellationToken);
-
-                    var orderDto = _mapper.Map<OrderDto>(order);
-                    await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderExpiredTimeUpdate, orderDto,
-                        cancellationToken: cancellationToken);
-
-
-                    var isBatch = next.Steps.Where(x => x.Value == workflowDto.NextStepName).Any();
-                    if (isBatch)
-                    {
-                        var step = next.Steps.Where(x => x.Value == workflowDto.NextStepName).FirstOrDefault();
-                        workflowDto.NextStepCode = step.Key;
-                        workflowDto.NextStepName = step.Value;
-                    }
-                    else
+                    var step = next.Steps.FirstOrDefault(x => x.Value == workflowDto.NextStepName);
+                    if (step is null)
                     {
                         result.Append("无权审核:" + delay.No);
                         fail++;
                         continue;
                     }
 
+                    workflowDto.NextStepCode = step.Key;
+                    workflowDto.NextStepName = step.Value;
+
                     await _workflowDomainService.NextAsync(delay.Workflow, workflowDto,
+                        expiredTime: order.ExpiredTime,
+                        cancellationToken: HttpContext.RequestAborted);
+
+                    var orderDto = _mapper.Map<OrderDto>(order);
+                    await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderExpiredTimeUpdate, orderDto,
                         cancellationToken: HttpContext.RequestAborted);
                 }
                 else
@@ -2481,14 +2488,24 @@ public class OrderController : BaseController
                     await _workflowApplication.RejectAsync(reject, HttpContext.RequestAborted);
                 }
 
-                success++;
 
                 delay.DelayState = dto.IsPass ? EDelayState.Pass : EDelayState.NoPass;
                 updateDelays.Add(delay);
-                //await _orderDelayRepository.Updateable(delay)
-                //    .UpdateColumns(d => d.DelayState)
-                //    .ExecuteCommandAsync(cancellationToken);
 
+                await _orderDelayRepository.Updateable(updateDelays)
+                    .UpdateColumns(d => d.DelayState)
+                    .ExecuteCommandAsync(HttpContext.RequestAborted);
+
+                await _orderRepository.Updateable(updateOrders)
+                    .UpdateColumns(d => new
+                    {
+                        d.ExpiredTime,
+                        d.NearlyExpiredTime,
+                        d.NearlyExpiredTimeOne,
+                        d.ExpiredTimeProvince
+                    })
+                    .ExecuteCommandAsync(HttpContext.RequestAborted);
+                success++;
             }
             catch (UserFriendlyException e)
             {
@@ -2497,7 +2514,7 @@ public class OrderController : BaseController
             }
         }
 
-        return $"总共: {dto.DelayId.Length}, 成功: {success}, 失败: {fail}, 失败原因: {result.ToString()}";
+        return $"总共: {dto.DelayId.Length}, 成功: {success}, 失败: {fail}, 失败原因: {result}";
     }
 
     /// <summary>
@@ -2535,6 +2552,7 @@ public class OrderController : BaseController
                         result.Steps.Remove(result.Steps.First(x => x.Value == "中心终审"));
                     }
                 }
+
                 result.IsAlterDay = _appOptions.Value.IsLuZhou && currentStep.Name == "班长审批";
                 return result;
             }
@@ -2631,7 +2649,7 @@ public class OrderController : BaseController
     public async Task<PagedDto<OrderDelayDto>> WaitDelayList([FromQuery] DelayListDto dto)
     {
         var (total, items) = await _orderApplication.WaitDelayList(dto)
-             .ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
+            .ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
 
         return new PagedDto<OrderDelayDto>(total, _mapper.Map<IReadOnlyList<OrderDelayDto>>(items));
     }
@@ -2788,11 +2806,11 @@ public class OrderController : BaseController
         }
 
         var (total, items) = await _orderApplication.MayScreenList(dto)
-       .ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
+            .ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
         var data = _mapper.Map<List<OrderVisitDetailDto>>(items);
         var isAdmin = _orderDomainService.IsCheckAdmin();
         data.ForEach(d => d.IsShowOperate = (dto.ScreenType == EOrderScreenType.Org && d.VisitOrgCode == _sessionContext.OrgId)
-        || isAdmin == true || (dto.ScreenType == EOrderScreenType.Seat));
+                                            || isAdmin == true || (dto.ScreenType == EOrderScreenType.Seat));
         return new PagedDto<OrderVisitDetailDto>(total, data);
     }
 
@@ -2849,7 +2867,7 @@ public class OrderController : BaseController
     public async Task<PagedDto<OrderScreenListDto>> ScreenList([FromQuery] ScreenListDto dto)
     {
         var (total, items) = await _orderApplication.OrderScreenList(dto)
-    .ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
+            .ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
         return new PagedDto<OrderScreenListDto>(total, _mapper.Map<IReadOnlyList<OrderScreenListDto>>(items));
     }
 
@@ -3064,7 +3082,8 @@ public class OrderController : BaseController
     [HttpGet("screen/{workflowId}/nextsteps")]
     public async Task<NextStepsDto> OrderScreenNextsteps(string workflowId)
     {
-        var workflow = await _workflowDomainService.GetWorkflowAsync(workflowId, withDefine: true, withSteps: true, cancellationToken: HttpContext.RequestAborted);
+        var workflow = await _workflowDomainService.GetWorkflowAsync(workflowId, withDefine: true, withSteps: true,
+            cancellationToken: HttpContext.RequestAborted);
         var currentStep =
             workflow.Steps.FirstOrDefault(d => d.Status == EWorkflowStepStatus.WaitForAccept || d.Status == EWorkflowStepStatus.WaitForHandle);
         if (workflow != null)
@@ -3089,6 +3108,7 @@ public class OrderController : BaseController
                         result.Steps.Remove(result.Steps.First(x => x.Value == "中心班长"));
                     }
                 }
+
                 result.IsPickFile = _appOptions.Value.IsYiBin && currentStep.Name == "中心领导";
                 return result;
             }
@@ -3117,6 +3137,7 @@ public class OrderController : BaseController
                 });
             }
         }
+
         var rsp = new
         {
             ScreenStatus = EnumExts.GetDescriptions<EScreenStatus>(),
@@ -3222,7 +3243,7 @@ public class OrderController : BaseController
     /// </summary>
     /// <param name="dto"></param>
     /// <returns></returns>
-	[HttpPut("order_screen_alter")]
+    [HttpPut("order_screen_alter")]
     [LogFilter("更新甄别信息")]
     public async Task Update([FromBody] OrderScreenAlterDto dto)
     {
@@ -3262,6 +3283,7 @@ public class OrderController : BaseController
                 allFiles.AddRange(stepFiles);
             }
         }
+
         return allFiles;
     }
 
@@ -3275,8 +3297,10 @@ public class OrderController : BaseController
         if (dto.ProvinceFiles.Any())
         {
             var fileJson = await _fileRepository.AddFileAsync(dto.ProvinceFiles, dto.ScreenId, HttpContext.RequestAborted);
-            await _orderScreenRepository.Updateable().SetColumns(x => new OrderScreen { ProvinceFileJson = fileJson }).Where(x => x.Id == dto.ScreenId).ExecuteCommandAsync(HttpContext.RequestAborted);
+            await _orderScreenRepository.Updateable().SetColumns(x => new OrderScreen { ProvinceFileJson = fileJson })
+                .Where(x => x.Id == dto.ScreenId).ExecuteCommandAsync(HttpContext.RequestAborted);
         }
+
         await _workflowDomainService.NextAsync(dto, cancellationToken: HttpContext.RequestAborted);
     }
 
@@ -3288,10 +3312,10 @@ public class OrderController : BaseController
     public async Task Previous([FromBody] PreviousWorkflowDto dto)
     {
         /*
-         *甄别退回到最开始节点到部门 todo 重构放在调用处判断  
+         *甄别退回到最开始节点到部门 todo 重构放在调用处判断
            if (workflow.FlowType == EFlowType.Review && workflow.ModuleCode == WorkflowModuleConsts.OrderScreen)
            {
-           	newPrevStep.FlowAssignType = newPrevStep.StepType == EStepType.Start ? EFlowAssignType.Org : prevStep.FlowAssignType;
+            newPrevStep.FlowAssignType = newPrevStep.StepType == EStepType.Start ? EFlowAssignType.Org : prevStep.FlowAssignType;
            }
          */
 
@@ -3332,10 +3356,8 @@ public class OrderController : BaseController
                 },
                 cancellationToken: HttpContext.RequestAborted);
         }
-
     }
 
-
     #endregion
 
     #region 工单督办
@@ -3381,6 +3403,7 @@ public class OrderController : BaseController
             k.Key = userlist[0].Name;
             k.Value = userlist[0].PhoneNo;
         }
+
         return k;
     }
 
@@ -3480,6 +3503,7 @@ public class OrderController : BaseController
                     if (string.IsNullOrEmpty(dto.PhoneNo))
                     {
                         #region 普通督办短信内容
+
                         var acceptSmsRoleIds = _systemSettingCacheManager.GetSetting(SettingConstants.AcceptSmsRoleIds)?.SettingValue;
                         //查询部门所有账号
                         var userlist = await _userRepository.Queryable().Where(x =>
@@ -3502,6 +3526,7 @@ public class OrderController : BaseController
                             };
                             await _mediator.Publish(new PushMessageNotify(messageDto), HttpContext.RequestAborted);
                         }
+
                         #endregion
                     }
                     else
@@ -3724,12 +3749,14 @@ public class OrderController : BaseController
             .WhereIF(dto.CreationTimeStart.HasValue, d => d.CreationTime >= dto.CreationTimeStart)
             .WhereIF(dto.CreationTimeEnd.HasValue, d => d.CreationTime <= dto.CreationTimeEnd)
             .WhereIF(!string.IsNullOrEmpty(dto.OrgLevelOneName), d => d.Order.OrgLevelOneName.Contains(dto.OrgLevelOneName)) //一级部门
-            .WhereIF(!string.IsNullOrEmpty(dto.ActualHandleOrgName), d => d.Order.ActualHandleOrgName.Contains(dto.ActualHandleOrgName)) //接办部门(综合查询模糊)
+            .WhereIF(!string.IsNullOrEmpty(dto.ActualHandleOrgName),
+                d => d.Order.ActualHandleOrgName.Contains(dto.ActualHandleOrgName)) //接办部门(综合查询模糊)
             .WhereIF(!string.IsNullOrEmpty(dto.CurrentStepCode), d => d.Order.CurrentStepCode == dto.CurrentStepCode) //当前办理节点
-               .WhereIF(_sessionContext.OrgIsCenter == false, d =>
-               (SqlFunc.IsNullOrEmpty(d.RoleId) == true && d.OrgId.StartsWith(_sessionContext.RequiredOrgId)) ||
-               (SqlFunc.IsNullOrEmpty(d.RoleId) == false && d.OrgId.StartsWith(_sessionContext.RequiredOrgId) && _sessionContext.Roles.Contains(d.RoleId))
-               )
+            .WhereIF(_sessionContext.OrgIsCenter == false, d =>
+                (SqlFunc.IsNullOrEmpty(d.RoleId) == true && d.OrgId.StartsWith(_sessionContext.RequiredOrgId)) ||
+                (SqlFunc.IsNullOrEmpty(d.RoleId) == false && d.OrgId.StartsWith(_sessionContext.RequiredOrgId) &&
+                 _sessionContext.Roles.Contains(d.RoleId))
+            )
 
             //   .WhereIF(_sessionContext.RequiredOrgId!="001", x => x.OrgId == _sessionContext.OrgId)
             .OrderByDescending(x => x.CreationTime)
@@ -3811,6 +3838,7 @@ public class OrderController : BaseController
                             model.OrgId = order.OrgLevelOneCode;
                             model.OrgName = order.OrgLevelOneName;
                         }
+
                         if (dto.AcceptSms)
                         {
                             try
@@ -3852,8 +3880,8 @@ public class OrderController : BaseController
                             {
                                 //查询部门所有账号
                                 var userlist = work.FlowAssignType == EFlowAssignType.User || work.FlowAssignType == EFlowAssignType.Role
-                                    ? await _userRepository.Queryable().Where(x => x.Id == workflowStepHandler.UserId).ToListAsync() :
-                                    await _userRepository.Queryable().Where(x => x.OrgId == workflowStepHandler.OrgId).ToListAsync();
+                                    ? await _userRepository.Queryable().Where(x => x.Id == workflowStepHandler.UserId).ToListAsync()
+                                    : await _userRepository.Queryable().Where(x => x.OrgId == workflowStepHandler.OrgId).ToListAsync();
                                 foreach (var user in userlist)
                                 {
                                     //发送短信
@@ -3877,10 +3905,9 @@ public class OrderController : BaseController
                             }
                         }
                     }
+
                     await _orderUrgeRepository.AddAsync(model, HttpContext.RequestAborted);
                 }
-
-
             }
         }
     }
@@ -3920,6 +3947,7 @@ public class OrderController : BaseController
                 model.OrgId = order.OrgLevelOneCode;
                 model.OrgName = order.OrgLevelOneName;
             }
+
             await _orderUrgeRepository.AddAsync(model, HttpContext.RequestAborted);
             if (_sessionContext.OrgIsCenter)
             {
@@ -3963,8 +3991,8 @@ public class OrderController : BaseController
                     {
                         //查询部门所有账号
                         var userlist = work.FlowAssignType == EFlowAssignType.User || work.FlowAssignType == EFlowAssignType.Role
-                            ? await _userRepository.Queryable().Where(x => x.Id == workflowStepHandler.UserId).ToListAsync() :
-                            await _userRepository.Queryable().Where(x => x.OrgId == workflowStepHandler.OrgId).ToListAsync();
+                            ? await _userRepository.Queryable().Where(x => x.Id == workflowStepHandler.UserId).ToListAsync()
+                            : await _userRepository.Queryable().Where(x => x.OrgId == workflowStepHandler.OrgId).ToListAsync();
                         foreach (var user in userlist)
                         {
                             //发送短信
@@ -4175,6 +4203,7 @@ public class OrderController : BaseController
         {
             return new PagedDto<OrderHistoryOutDto>() { };
         }
+
         var query = _orderRepository.Queryable();
 
         if (_appOptions.Value.IsLuZhou && !_sessionContext.OrgIsCenter)
@@ -4197,7 +4226,8 @@ public class OrderController : BaseController
             .Includes(d => d.OrderScreens)
             .Includes(d => d.OrderTerminates)
             .Where(d => d.Contact == dto.PhoneNo)
-            .WhereIF(_sessionContext.OrgIsCenter == false && (_appOptions.Value.IsYiBin == true || _appOptions.Value.IsLuZhou == true), d => d.IsSecret == false)
+            .WhereIF(_sessionContext.OrgIsCenter == false && (_appOptions.Value.IsYiBin == true || _appOptions.Value.IsLuZhou == true),
+                d => d.IsSecret == false)
             .WhereIF(!string.IsNullOrEmpty(dto.OrderId) && _appOptions.Value.IsLuZhou == false, d => d.Id != dto.OrderId)
             .WhereIF(!string.IsNullOrEmpty(dto.Keyword), d => d.Title.Contains(dto.Keyword!) || d.No.Contains(dto.Keyword!))
             .Select(d => new OrderHistoryOutDto
@@ -4482,22 +4512,28 @@ public class OrderController : BaseController
                 cancellationToken: HttpContext.RequestAborted);
 
             List<OrderRemarksDto> remarks = workflow.Steps.Where(x => !string.IsNullOrEmpty(x.Remark)).Select(x => new OrderRemarksDto
-            { Remark = x.Remark, RemarkTime = x.HandleTime, RemarkUser = x.HandlerName }).ToList();
+                { Remark = x.Remark, RemarkTime = x.HandleTime, RemarkUser = x.HandlerName }).ToList();
             dto.OrderRemarks = remarks;
             //退回
             if (order.Status == EOrderStatus.SendBack || order.Status == EOrderStatus.BackToUnAccept)
             {
                 var backTrace = workflow.Traces.Where(x => x.Status == EWorkflowStepStatus.Handled).OrderByDescending(x => x.CreationTime).First();
                 // backTrace.Opinion = backTrace.Opinion.Replace("流程归档", "");
-                dto.SendBackOpinion = string.IsNullOrEmpty(backTrace.Opinion) ? string.Empty : "【" + backTrace.HandlerOrgName + "】" + backTrace.Opinion;
+                dto.SendBackOpinion = string.IsNullOrEmpty(backTrace.Opinion)
+                    ? string.Empty
+                    : "【" + backTrace.HandlerOrgName + "】" + backTrace.Opinion;
                 //var sendBack = await _orderSendBackAuditRepository.Queryable().Where(x => x.OrderId == dto.Id).OrderByDescending(x => x.CreationTime).FirstAsync();
                 //dto.SendBackOpinion = sendBack is { Id: not null } && !string.IsNullOrEmpty(sendBack.Content) ? sendBack.Content : string.Empty;
             }
+
             //重办
             if (order.Status == EOrderStatus.Special || order.Status == EOrderStatus.SpecialToUnAccept)
             {
-                var reTransactTrace = workflow.Traces.Where(x => x.Status == EWorkflowStepStatus.Handled).OrderByDescending(x => x.CreationTime).First();
-                dto.ReTransactOpinion = string.IsNullOrEmpty(reTransactTrace.Opinion) ? string.Empty : "【" + reTransactTrace.HandlerOrgName + "】" + reTransactTrace.Opinion;
+                var reTransactTrace = workflow.Traces.Where(x => x.Status == EWorkflowStepStatus.Handled).OrderByDescending(x => x.CreationTime)
+                    .First();
+                dto.ReTransactOpinion = string.IsNullOrEmpty(reTransactTrace.Opinion)
+                    ? string.Empty
+                    : "【" + reTransactTrace.HandlerOrgName + "】" + reTransactTrace.Opinion;
             }
         }
 
@@ -4620,7 +4656,8 @@ public class OrderController : BaseController
         dto.InitAddress();
 
         //工单保存特殊身份验证
-        var specialIdentityVerification = bool.Parse(_systemSettingCacheManager.GetSetting(SettingConstants.SpecialIdentityVerification).SettingValue[0]);
+        var specialIdentityVerification =
+            bool.Parse(_systemSettingCacheManager.GetSetting(SettingConstants.SpecialIdentityVerification).SettingValue[0]);
         if (specialIdentityVerification)
         {
             var specialNumber = await _specialNumberRepository.GetAsync(p => p.PhoneNumber == dto.FromPhone, HttpContext.RequestAborted);
@@ -4637,7 +4674,8 @@ public class OrderController : BaseController
         //泸州任务 311 投诉件需限制受理内容的字数等需求
         if (_appOptions.Value.IsLuZhou && dto.AcceptTypeCode == "35")
         {
-            if (dto.SourceChannelCode != "S12345" && dto.SourceChannelCode != "SZMHD" && dto.SourceChannelCode != "XCX" && dto.SourceChannelCode != "JCeT")
+            if (dto.SourceChannelCode != "S12345" && dto.SourceChannelCode != "SZMHD" && dto.SourceChannelCode != "XCX" &&
+                dto.SourceChannelCode != "JCeT")
             {
                 if (dto.Content.Length < 25)
                     throw UserFriendlyException.SameMessage("保存失败,投诉类型受理内容字数需要至少25个字!");
@@ -4705,11 +4743,12 @@ public class OrderController : BaseController
                 order.OrderTagCode = String.Join(", ", dicData);
             }
         }
+
         if (_appOptions.Value.IsLuZhou)
         {
             //期满时间
             var expiredTimeConfig =
-               await _expireTime.CalcExpiredTime(DateTime.Now, DateTime.Now, EFlowDirection.CenterToCenter, order.Adapt<OrderTimeClacInfo>());
+                await _expireTime.CalcExpiredTime(DateTime.Now, DateTime.Now, EFlowDirection.CenterToCenter, order.Adapt<OrderTimeClacInfo>());
             _mapper.Map(expiredTimeConfig, order);
         }
 
@@ -4877,7 +4916,8 @@ public class OrderController : BaseController
         dto.InitAddress();
 
         //工单保存特殊身份验证
-        var specialIdentityVerification = bool.Parse(_systemSettingCacheManager.GetSetting(SettingConstants.SpecialIdentityVerification).SettingValue[0]);
+        var specialIdentityVerification =
+            bool.Parse(_systemSettingCacheManager.GetSetting(SettingConstants.SpecialIdentityVerification).SettingValue[0]);
         if (specialIdentityVerification)
         {
             var specialNumber = await _specialNumberRepository.GetAsync(p => p.PhoneNumber == dto.FromPhone, HttpContext.RequestAborted);
@@ -4894,7 +4934,8 @@ public class OrderController : BaseController
         //泸州任务 311 投诉件需限制受理内容的字数等需求
         if (_appOptions.Value.IsLuZhou && dto.AcceptTypeCode == "35")
         {
-            if (dto.SourceChannelCode != "S12345" && dto.SourceChannelCode != "SZMHD" && dto.SourceChannelCode != "XCX" && dto.SourceChannelCode != "JCeT")
+            if (dto.SourceChannelCode != "S12345" && dto.SourceChannelCode != "SZMHD" && dto.SourceChannelCode != "XCX" &&
+                dto.SourceChannelCode != "JCeT")
             {
                 if (dto.Content.Length < 25)
                     throw UserFriendlyException.SameMessage("保存失败,投诉类型受理内容字数需要至少25个字!");
@@ -4919,6 +4960,7 @@ public class OrderController : BaseController
             if (dto.IsEdit != true && order.Status > EOrderStatus.HandOverToUnAccept)
                 throw UserFriendlyException.SameMessage("工单已发起流程,不可编辑");
         }
+
         if (_systemSettingCacheManager.Snapshot)
         {
             await _orderSnapshotRepository.Updateable()
@@ -5173,7 +5215,7 @@ public class OrderController : BaseController
             dto.Content = (await _orderRepository.GetAsync(orderId, HttpContext.RequestAborted))?.Content;
         }
 
-        var isAqyh = false;//行业类型是否为随手拍安全隐患
+        var isAqyh = false; //行业类型是否为随手拍安全隐患
         if (_systemSettingCacheManager.Snapshot)
         {
             var orderSnapShot = await _orderSnapshotRepository.GetAsync(orderId, HttpContext.RequestAborted);
@@ -5183,6 +5225,7 @@ public class OrderController : BaseController
                 dto.Steps.RemoveAll(d => d.BusinessType == EBusinessType.Send);
             }
         }
+
         if (!isAqyh)
             dto.Steps = dto.Steps.Where(d => string.CompareOrdinal(d.Value, "网格员") != 0
                                              && string.CompareOrdinal(d.Value, "工单标记") != 0).ToList();
@@ -5203,15 +5246,17 @@ public class OrderController : BaseController
                 $"非法参数, {string.Join(',', validResult.Errors.Select(d => d.ErrorMessage))}");
 
         var workflow = await _workflowDomainService.GetWorkflowAsync(dto.Workflow.WorkflowId, withDefine: true, withSteps: true, withTraces: true,
-          cancellationToken: HttpContext.RequestAborted);
+            cancellationToken: HttpContext.RequestAborted);
 
         #region 中心归档,自动延期一天
+
         if (dto.Workflow.NextStepCode == "end" && _appOptions.Value.IsYiBin && _sessionContext.OrgIsCenter)
         {
             var dOrder = await _orderRepository.GetAsync(workflow.ExternalId, HttpContext.RequestAborted);
             if (dOrder != null && dOrder.ExpiredTime < DateTime.Now)
             {
-                var delays = await _orderDelayRepository.Queryable().Where(x => x.OrderId == dOrder.Id && x.AutomaticDelayNum > 0).ToListAsync(HttpContext.RequestAborted);
+                var delays = await _orderDelayRepository.Queryable().Where(x => x.OrderId == dOrder.Id && x.AutomaticDelayNum > 0)
+                    .ToListAsync(HttpContext.RequestAborted);
                 var delayOrder = new OrderDelay();
                 if (delays.Any())
                 {
@@ -5221,9 +5266,11 @@ public class OrderController : BaseController
                     {
                         startTime = dOrder.CenterToOrgTime.Value;
                     }
+
                     delayOrder.AfterDelay = (await _expireTime
                         .CalcEndTime(startTime, startTime, delayOrder.DelayUnit, delayOrder.DelayNum, dOrder.AcceptTypeCode))?.EndTime; //todo
-                    await _orderDelayRepository.Updateable().SetColumns(x => new OrderDelay() { AutomaticDelayNum = x.AutomaticDelayNum + 1, ApplyDelayTime = DateTime.Now, AfterDelay = delayOrder.AfterDelay })
+                    await _orderDelayRepository.Updateable().SetColumns(x => new OrderDelay()
+                            { AutomaticDelayNum = x.AutomaticDelayNum + 1, ApplyDelayTime = DateTime.Now, AfterDelay = delayOrder.AfterDelay })
                         .Where(x => x.Id == delayOrder.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
                 }
                 else
@@ -5251,18 +5298,24 @@ public class OrderController : BaseController
                     {
                         startTime = dOrder.CenterToOrgTime.Value;
                     }
+
                     if (delayOrder.BeforeDelay != null)
                     {
                         delayOrder.AfterDelay = (await _expireTime
-                            .CalcEndTime(delayOrder.BeforeDelay.Value, startTime, delayOrder.DelayUnit, delayOrder.DelayNum, dOrder.AcceptTypeCode))?.EndTime; //todo
+                                .CalcEndTime(delayOrder.BeforeDelay.Value, startTime, delayOrder.DelayUnit, delayOrder.DelayNum,
+                                    dOrder.AcceptTypeCode))
+                            ?.EndTime; //todo
                     }
+
                     await _orderDelayRepository.AddAsync(delayOrder, false, HttpContext.RequestAborted);
                 }
+
                 //处理工单延期
                 await _orderApplication.DelayOrderExpiredTimeAsync(dOrder.Id, delayOrder.DelayNum,
                     delayOrder.DelayUnit, delayOrder.IsProDelay, HttpContext.RequestAborted);
             }
         }
+
         #endregion
 
         var order = await _orderApplication.SaveOrderWorkflowInfo(dto, HttpContext.RequestAborted);
@@ -5401,10 +5454,12 @@ public class OrderController : BaseController
                     // 宜宾需求: 1.是否是派单节点  2.是否存在历史派单节点  3.存在获取上个派单节点  4.不存在走平均派单   过滤历史派单节点不为派单池
                     if (_appOptions.Value.IsYiBin || _appOptions.Value.IsZiGong)
                     {
-                        var sendOrderTraces = workflow.Traces.Where(x => x.BusinessType == EBusinessType.Send && x.HandlerId != AppDefaults.SendPoolId);
+                        var sendOrderTraces =
+                            workflow.Traces.Where(x => x.BusinessType == EBusinessType.Send && x.HandlerId != AppDefaults.SendPoolId);
                         if (sendOrderTraces.Any())
                         {
-                            var sendOrderTrace = workflow.Traces.Where(x => x.BusinessType == EBusinessType.Send && x.HandlerId != AppDefaults.SendPoolId)
+                            var sendOrderTrace = workflow.Traces
+                                .Where(x => x.BusinessType == EBusinessType.Send && x.HandlerId != AppDefaults.SendPoolId)
                                 .OrderByDescending(x => x.CreationTime)
                                 .FirstOrDefault();
                             nextDto.NextHandlers = new List<StepAssignInfo>
@@ -5609,6 +5664,7 @@ public class OrderController : BaseController
                     // await _sessionContext.ChangeSessionAsync(operater.Id, cancellation);
                     await _sessionContextManager.ChangeSessionContextByUserIdAsync(operater.Id, cancellation);
                 }
+
                 await HandleNextInMainAndSecondaryAsync(definition, orgs, nextDto, expiredTime, isAutoFillSummaryOpinion, cancellation);
             }
         }
@@ -5998,6 +6054,7 @@ public class OrderController : BaseController
                 allFiles.ForEach(x => x.GetStepName("工单受理"));
             }
         }
+
         foreach (var step in steps)
         {
             if (step.FileJson != null && step.FileJson.Any())
@@ -6008,6 +6065,7 @@ public class OrderController : BaseController
                 allFiles.AddRange(stepFiles);
             }
         }
+
         return allFiles;
     }
 
@@ -6026,6 +6084,7 @@ public class OrderController : BaseController
         {
             steps = steps.Where(x => x.HandlerOrgId != null && x.HandlerOrgId.StartsWith(_sessionContext.RequiredOrgId)).ToList();
         }
+
         var workflowDto = _mapper.Map<WorkflowDto>(workflow);
         workflowDto.Traces = steps;
         foreach (var item in workflowDto.Traces)
@@ -6035,8 +6094,10 @@ public class OrderController : BaseController
                 var ids = item.FileJson.Select(x => x.Id).ToList();
                 item.Files = await _fileRepository.GetFilesAsync(ids, HttpContext.RequestAborted);
             }
+
             item.Name = item.Name + "(" + item.HandlerOrgName + ")";
         }
+
         return workflowDto;
     }
 
@@ -6047,7 +6108,6 @@ public class OrderController : BaseController
     /// <returns></returns>
     [HttpPost("list/file_upload")]
     [LogFilter("附件列表补充附件")]
-
     public async Task Add([FromBody] OrderStepUploadFilesDto dto)
     {
         var order = await _orderRepository.GetAsync(dto.OrderId);
@@ -6058,8 +6118,11 @@ public class OrderController : BaseController
         {
             listFileJson = await _fileRepository.AddFileAsync(dto.Files, dto.StepId, "", HttpContext.RequestAborted);
         }
-        await _workflowStepRepository.Updateable().SetColumns(x => new WorkflowStep { FileJson = listFileJson }).Where(x => x.Id == dto.StepId).ExecuteCommandAsync(HttpContext.RequestAborted);
-        await _workflowTraceRepository.Updateable().SetColumns(x => new WorkflowTrace { FileJson = listFileJson }).Where(x => x.Id == dto.StepId).ExecuteCommandAsync(HttpContext.RequestAborted);
+
+        await _workflowStepRepository.Updateable().SetColumns(x => new WorkflowStep { FileJson = listFileJson }).Where(x => x.Id == dto.StepId)
+            .ExecuteCommandAsync(HttpContext.RequestAborted);
+        await _workflowTraceRepository.Updateable().SetColumns(x => new WorkflowTrace { FileJson = listFileJson }).Where(x => x.Id == dto.StepId)
+            .ExecuteCommandAsync(HttpContext.RequestAborted);
 
         ////附件上传后推送省上
         var orderDto = _mapper.Map<OrderDto>(order);
@@ -6404,14 +6467,17 @@ public class OrderController : BaseController
             if (order.Workflow.IsInCountersign) throw UserFriendlyException.SameMessage("工单会签中,无法进行退回!");
 
             var (currentStep, prevStep, steps, isOrgToCenter, isSecondToFirstOrgLevel) = await _workflowApplication.GetPreviousInformationAsync(
-               dto.WorkflowId, _sessionContext.RequiredUserId, _sessionContext.RequiredOrgId, _sessionContext.Roles, dto.AssignStepId, HttpContext.RequestAborted);
+                dto.WorkflowId, _sessionContext.RequiredUserId, _sessionContext.RequiredOrgId, _sessionContext.Roles, dto.AssignStepId,
+                HttpContext.RequestAborted);
 
             if (oneSendBack && isOrgToCenter && _appOptions.Value.IsZiGong)
             {
                 if (order.SendBackAuditEndTime.HasValue && order.SendBackAuditEndTime.Value < DateTime.Now)
-                    throw UserFriendlyException.SameMessage("工单截至退回时间【" + order.SendBackAuditEndTime.Value.ToString("yyyy-MM-dd HH:mm:ss") + "】,无法进行退回!");
+                    throw UserFriendlyException.SameMessage("工单截至退回时间【" + order.SendBackAuditEndTime.Value.ToString("yyyy-MM-dd HH:mm:ss") +
+                                                            "】,无法进行退回!");
 
-                var sendBackAgain = await _orderSendBackAuditRepository.Queryable().Where(x => x.OrderId == dto.OrderId && x.IsReturnAgain == false).AnyAsync();
+                var sendBackAgain = await _orderSendBackAuditRepository.Queryable().Where(x => x.OrderId == dto.OrderId && x.IsReturnAgain == false)
+                    .AnyAsync();
                 if (sendBackAgain)
                     throw UserFriendlyException.SameMessage("工单已不允许退回!");
             }
@@ -6429,6 +6495,7 @@ public class OrderController : BaseController
                 {
                     assignStep = steps.FirstOrDefault(x => x.Id == dto.AssignStepId);
                 }
+
                 audit.SendBackOrgId = audit.IsAssign.Value ? assignStep.HandlerOrgId : prevStep.HandlerOrgId;
                 audit.SendBackOrgName = audit.IsAssign.Value ? assignStep.HandlerOrgName : prevStep.HandlerOrgName;
                 audit.SendBackStepName = audit.IsAssign.Value ? assignStep.Name : prevStep.Name;
@@ -6452,6 +6519,7 @@ public class OrderController : BaseController
             audit.AuditTime = DateTime.Now;
             await _orderApplication.OrderPrevious(audit, order, HttpContext.RequestAborted);
         }
+
         await _orderSendBackAuditRepository.AddAsync(audit, HttpContext.RequestAborted);
     }
 
@@ -6499,6 +6567,7 @@ public class OrderController : BaseController
                 //    }
                 //}
             }
+
             sendBack.SendBackData.ExpiredTime = order.ExpiredTime;
             await _orderApplication.OrderPrevious(sendBack, order, HttpContext.RequestAborted);
         }
@@ -6506,8 +6575,8 @@ public class OrderController : BaseController
         {
             await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { Status = sendBack.Status.Value })
                 .Where(o => o.Id == sendBack.OrderId).ExecuteCommandAsync(HttpContext.RequestAborted);
-
         }
+
         await _orderSendBackAuditRepository.UpdateAsync(sendBack, HttpContext.RequestAborted);
     }
 
@@ -6541,9 +6610,11 @@ public class OrderController : BaseController
                 var order = await _orderRepository.Queryable().Includes(d => d.Workflow).FirstAsync(d => d.Id == sendBack.OrderId);
                 if (_appOptions.Value.IsZiGong)
                 {
-                    var (currentStep, prevStep, steps, isOrgToCenter, isSecondToFirstOrgLevel) = await _workflowApplication.GetPreviousInformationAsync(
-                        order.WorkflowId, sendBack.WorkflowUserId, sendBack.WorkflowOrgId, sendBack.WorkflowRoleIds.ToArray(), sendBack.AssignStepId,
-                        HttpContext.RequestAborted);
+                    var (currentStep, prevStep, steps, isOrgToCenter, isSecondToFirstOrgLevel) =
+                        await _workflowApplication.GetPreviousInformationAsync(
+                            order.WorkflowId, sendBack.WorkflowUserId, sendBack.WorkflowOrgId, sendBack.WorkflowRoleIds.ToArray(),
+                            sendBack.AssignStepId,
+                            HttpContext.RequestAborted);
                     if (prevStep.BusinessType == EBusinessType.Send)
                     {
                         // 平均派单
@@ -6564,6 +6635,7 @@ public class OrderController : BaseController
                 await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { Status = sendBack.Status.Value })
                     .Where(o => o.Id == sendBack.OrderId).ExecuteCommandAsync(HttpContext.RequestAborted);
             }
+
             await _orderSendBackAuditRepository.UpdateAsync(sendBack, HttpContext.RequestAborted);
         }
     }
@@ -6664,7 +6736,8 @@ public class OrderController : BaseController
             throw UserFriendlyException.SameMessage("该工单未开启流程");
 
         var (currentStep, prevStep, steps, isOrgToCenter, isSecondToFirstOrgLevel) = await _workflowApplication.GetPreviousInformationAsync(
-            order.WorkflowId, _sessionContext.RequiredUserId, _sessionContext.RequiredOrgId, _sessionContext.Roles, string.Empty, HttpContext.RequestAborted);
+            order.WorkflowId, _sessionContext.RequiredUserId, _sessionContext.RequiredOrgId, _sessionContext.Roles, string.Empty,
+            HttpContext.RequestAborted);
         ///查询上一节点是否是领导节点
         ///ture 流程排除领导节点 排除当前节点 prevStep.BusinessType == EBusinessType.DepartmentLeader
         if (_appOptions.Value.IsYiBin && prevStep.Name.Contains("领导"))
@@ -7209,6 +7282,7 @@ public class OrderController : BaseController
                 handleMode = EHandleMode.Recall;
                 workflowTraceType = EWorkflowTraceType.Recall;
             }
+
             if (dto.SpecialType == ESpecialType.SendBack)
             {
                 handleMode = EHandleMode.PublishPrevious;
@@ -7310,7 +7384,8 @@ public class OrderController : BaseController
         }
 
         await _orderSpecialRepository.AddAsync(special, HttpContext.RequestAborted);
-        await _publisher.PublishAsync(new AddOrderSpecialNotify(order.Id, order.SourceChannel, dto.ReTransactError), PublishStrategy.ParallelWhenAll, HttpContext.RequestAborted);
+        await _publisher.PublishAsync(new AddOrderSpecialNotify(order.Id, order.SourceChannel, dto.ReTransactError), PublishStrategy.ParallelWhenAll,
+            HttpContext.RequestAborted);
     }
 
     /// <summary>
@@ -7517,7 +7592,7 @@ public class OrderController : BaseController
                 #endregion
 
                 var (workflow, targetStepDefine, currentStep, targetStep, newStep, isOrgToCenter) =
-                await _orderApplication.RecallAsync(dto, special, order, HttpContext.RequestAborted);
+                    await _orderApplication.RecallAsync(dto, special, order, HttpContext.RequestAborted);
 
                 if (string.IsNullOrEmpty(currentStep?.HandlerOrgId))
                 {
@@ -7612,7 +7687,7 @@ public class OrderController : BaseController
             .WhereIF(pagedDto.EndTime.HasValue, (x, p) => p.CreationTime <= pagedDto.EndTime)
             .WhereIF(!string.IsNullOrEmpty(pagedDto.No), (x, p) => x.No.Contains(pagedDto.No))
             .WhereIF(pagedDto.State.HasValue, (x, p) => p.State == pagedDto.State)
-           .WhereIF(!string.IsNullOrEmpty(pagedDto.CreatorName), (x, p) => p.CreatorName.Contains(pagedDto.CreatorName))
+            .WhereIF(!string.IsNullOrEmpty(pagedDto.CreatorName), (x, p) => p.CreatorName.Contains(pagedDto.CreatorName))
             .Select((x, p) => new
             {
                 index = SqlFunc.RowNumber($"{p.CreationTime} desc ", $"{p.OrderId}"),
@@ -7665,7 +7740,7 @@ public class OrderController : BaseController
                 d => d.Title.Contains(dto.Keyword!) || d.No.Contains(dto.Keyword!))
             //.WhereIF(!string.IsNullOrEmpty(dto.Content), d => d.Content.Contains(dto.Content!))
             .WhereIF(!string.IsNullOrEmpty(dto.AcceptType), d => d.AcceptTypeCode == dto.AcceptType) //受理类型
-                                                                                                     //.WhereIF(dto.AcceptTypes.Any(), d => dto.AcceptTypes.Contains(d.AcceptTypeCode)) //受理类型
+            //.WhereIF(dto.AcceptTypes.Any(), d => dto.AcceptTypes.Contains(d.AcceptTypeCode)) //受理类型
             .WhereIF(!string.IsNullOrEmpty(dto.Channel), d => d.SourceChannelCode == dto.Channel) //来源渠道
             .WhereIF(!string.IsNullOrEmpty(dto.Hotspot), d => d.HotspotSpliceName != null && d.HotspotSpliceName.Contains(dto.Hotspot))
             .WhereIF(!string.IsNullOrEmpty(dto.TransferPhone), d => d.TransferPhone.Contains(dto.TransferPhone!))
@@ -7757,7 +7832,9 @@ public class OrderController : BaseController
         var rsp = new
         {
             SpecialTimeType = EnumExts.GetDescriptions<ETimeType>(),
-            SpecialReason = isInstaShot ? _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.InstaShotSpecialReason) : _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.SpecialReason),
+            SpecialReason = isInstaShot
+                ? _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.InstaShotSpecialReason)
+                : _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.SpecialReason),
             InstaShotSpecialReason = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.InstaShotSpecialReason),
             Step = step,
             IsTerminate =
@@ -7788,7 +7865,8 @@ public class OrderController : BaseController
             step.Steps = step.Steps.Where(x => x.Key.ToLower() != "start").ToList();
             if (step.Steps.Where(x => x.BusinessType == EBusinessType.Department && x.StepType == EStepType.Normal && x.OrgLevel == 1).Any())
             {
-                var stepdDefault = step.Steps.Where(x => x.BusinessType == EBusinessType.Department && x.StepType == EStepType.Normal && x.OrgLevel == 1)
+                var stepdDefault = step.Steps
+                    .Where(x => x.BusinessType == EBusinessType.Department && x.StepType == EStepType.Normal && x.OrgLevel == 1)
                     .FirstOrDefault();
                 defaultStepKey = stepdDefault.Key;
             }
@@ -7968,7 +8046,8 @@ public class OrderController : BaseController
             var nextStep = await _workflowTraceRepository.Queryable()
                 .LeftJoin<SystemOrganize>((step, o) => step.HandlerOrgId == o.Id)
                 .Where((step, o) => step.WorkflowId == order.WorkflowId && step.TraceStyle == ETraceStyle.Flow && step.StepType == EStepType.Normal
-                    && !string.IsNullOrEmpty(step.HandlerOrgId) && o.Level == 1 && step.BusinessType == EBusinessType.Department).OrderByDescending(step => step.CreationTime)
+                                    && !string.IsNullOrEmpty(step.HandlerOrgId) && o.Level == 1 && step.BusinessType == EBusinessType.Department)
+                .OrderByDescending(step => step.CreationTime)
                 .FirstAsync(HttpContext.RequestAborted);
             if (nextStep is null)
                 continue;
@@ -9679,7 +9758,7 @@ public class OrderController : BaseController
         {
             await _orderRepository.Updateable()
                 .SetColumns(o => new Orders.Order()
-                { SignerId = dto.Handler.UserId, SignerName = dto.Handler.Username, Status = EOrderStatus.HandOverToUnAccept })
+                    { SignerId = dto.Handler.UserId, SignerName = dto.Handler.Username, Status = EOrderStatus.HandOverToUnAccept })
                 .Where(o => o.Id == dto.OrderId).ExecuteCommandAsync(HttpContext.RequestAborted);
         }
         else
@@ -9708,7 +9787,7 @@ public class OrderController : BaseController
             {
                 await _orderRepository.Updateable()
                     .SetColumns(o => new Orders.Order()
-                    { Status = status, CenterToOrgHandlerId = dto.Handler.UserId, CenterToOrgHandlerName = dto.Handler.Username })
+                        { Status = status, CenterToOrgHandlerId = dto.Handler.UserId, CenterToOrgHandlerName = dto.Handler.Username })
                     .Where(o => o.Id == dto.OrderId).ExecuteCommandAsync(HttpContext.RequestAborted);
             }
             else
@@ -9803,6 +9882,7 @@ public class OrderController : BaseController
     #endregion
 
     #region 添加补充
+
     /// <summary>
     /// 添加补充 _notificationWaitSendRepository
     /// </summary>
@@ -9835,6 +9915,7 @@ public class OrderController : BaseController
         if (!string.IsNullOrEmpty(id))
         {
             #region 处理推送消息
+
             //获取当前办理节点数据
             var work = await _workflowStepRepository.GetAsync(p => p.Id == data.ActualHandleStepId, HttpContext.RequestAborted);
             if (work != null)
@@ -9843,7 +9924,6 @@ public class OrderController : BaseController
                 var workflowStepHandler = work.GetWorkflowStepHandler();
                 if (workflowStepHandler != null)
                 {
-
                     AddCircularDto circularDto = new AddCircularDto()
                     {
                         Title = "工单补充",
@@ -9865,11 +9945,11 @@ public class OrderController : BaseController
                             UserName = workflowStepHandler.Username
                         });
                     }
-                    else if (!string.IsNullOrEmpty(workflowStepHandler.RoleId))//指定角色
+                    else if (!string.IsNullOrEmpty(workflowStepHandler.RoleId)) //指定角色
                     {
                         //查询指定角色下面所有的用户
                         var userlist = await _userRepository.Queryable().Where(x =>
-                            x.OrgId == workflowStepHandler.OrgId && x.Roles.Any(d => workflowStepHandler.RoleId.Contains(d.Id)))
+                                x.OrgId == workflowStepHandler.OrgId && x.Roles.Any(d => workflowStepHandler.RoleId.Contains(d.Id)))
                             .Select(d => new CircularReadGroupDto
                             {
                                 UserId = d.Id,
@@ -9877,7 +9957,7 @@ public class OrderController : BaseController
                             }).ToListAsync();
                         users.AddRange(userlist);
                     }
-                    else if (!string.IsNullOrEmpty(workflowStepHandler.OrgId))//指定部门
+                    else if (!string.IsNullOrEmpty(workflowStepHandler.OrgId)) //指定部门
                     {
                         users.Add(new CircularReadGroupDto()
                         {

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

@@ -90,6 +90,7 @@ namespace Hotline.Application.FlowEngine
         /// 查询指定节点的下一步待选节点
         /// </summary>
         Task<NextStepsWithOpinionDto<NextStepOption>> GetNextStepsAsync(string workflowId, string stepId, CancellationToken cancellationToken);
+        Task<NextStepsWithOpinionDto<NextStepOption>> GetNextStepsAsync(Workflow workflow, CancellationToken cancellationToken);
 
         /// <summary>
         /// 跨级指派查询下一步可选节点及办理对象参数

+ 11 - 0
src/Hotline.Application/FlowEngine/WorkflowApplication.cs

@@ -550,6 +550,17 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
 
         return await GetNextStepsAsync(workflow, currentStep, cancellationToken);
     }
+    
+    public async Task<NextStepsWithOpinionDto<NextStepOption>> GetNextStepsAsync(Workflow workflow, CancellationToken cancellationToken)
+    {
+        var currentStep = _workflowDomainService.FindCurrentStepWaitForHandle(workflow,
+            _sessionContext.RequiredUserId, _sessionContext.RequiredOrgId,
+            _sessionContext.Roles);
+        if (currentStep.StepType is EStepType.End)
+            throw new UserFriendlyException("结束节点无需办理");
+
+        return await GetNextStepsAsync(workflow, currentStep, cancellationToken);
+    }
 
     /// <summary>
     /// 跨级指派查询下一步可选节点及办理对象参数