Эх сурвалжийг харах

refactor: 特提指派对象生成

xfe 2 сар өмнө
parent
commit
f3a8b78423

+ 43 - 36
src/Hotline.Api/Controllers/OrderController.cs

@@ -5984,15 +5984,21 @@ public class OrderController : BaseController
                 expiredTime.NearlyExpiredTimeOne = order.NearlyExpiredTimeOne.Value;
                 expiredTime.NearlyExpiredTimeOne = order.NearlyExpiredTimeOne.Value;
             }
             }
 
 
-            await _orderRepository.Updateable().SetColumns(o => new Orders.Order()
-                {
-                    ExpiredTime = expiredTime.ExpiredTime,
-                    NearlyExpiredTime = expiredTime.NearlyExpiredTime,
-                    NearlyExpiredTimeOne = expiredTime.NearlyExpiredTimeOne,
-                    ProcessType = processType,
-                    Status = EOrderStatus.Special
-                })
-                .Where(o => o.Id == order.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
+            // await _orderRepository.Updateable().SetColumns(o => new Orders.Order()
+            //     {
+            //         ExpiredTime = expiredTime.ExpiredTime,
+            //         NearlyExpiredTime = expiredTime.NearlyExpiredTime,
+            //         NearlyExpiredTimeOne = expiredTime.NearlyExpiredTimeOne,
+            //         ProcessType = processType,
+            //         Status = EOrderStatus.Special
+            //     })
+            //     .Where(o => o.Id == order.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
+            order.ExpiredTime = expiredTime.ExpiredTime;
+            order.NearlyExpiredTime = expiredTime.NearlyExpiredTime;
+            order.NearlyExpiredTimeOne = expiredTime.NearlyExpiredTimeOne;
+            order.ProcessType = processType;
+            order.Status = EOrderStatus.Special;
+            
             var orderDto = _mapper.Map<OrderDto>(order);
             var orderDto = _mapper.Map<OrderDto>(order);
             await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderExpiredTimeUpdate, orderDto,
             await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderExpiredTimeUpdate, orderDto,
                 cancellationToken: HttpContext.RequestAborted);
                 cancellationToken: HttpContext.RequestAborted);
@@ -6007,16 +6013,16 @@ public class OrderController : BaseController
             var (workflow, targetStepDefine, currentStep, targetStep, newStep, isOrgToCenter) = await _workflowDomainService.RecallAsync(recall,
             var (workflow, targetStepDefine, currentStep, targetStep, newStep, isOrgToCenter) = await _workflowDomainService.RecallAsync(recall,
                 dto.NextHandlers.FirstOrDefault(), EWorkflowTraceType.Recall,
                 dto.NextHandlers.FirstOrDefault(), EWorkflowTraceType.Recall,
                 expiredTime.ExpiredTime, order.Status >= EOrderStatus.Filed, EHandleMode.Recall,
                 expiredTime.ExpiredTime, order.Status >= EOrderStatus.Filed, EHandleMode.Recall,
-                async (workflow, currentStep, targetStepDefine, newStep) =>
+                async (workflow, currentStep, targetStepDefine, targetStep, targetStepNew) =>
                 {
                 {
                     var basicWorkflowDto = _mapper.Map<BasicWorkflowDto>(dto);
                     var basicWorkflowDto = _mapper.Map<BasicWorkflowDto>(dto);
-                    var stepAssignInfo = await _orderApplication.GetOrderRecallAssignInfoAsync(workflow, targetStepDefine, currentStep,
+                    var stepAssignInfo = await _orderApplication.GetOrderRecallAssignInfoAsync(workflow, targetStepDefine, targetStep,
                         basicWorkflowDto, HttpContext.RequestAborted);
                         basicWorkflowDto, HttpContext.RequestAborted);
                     if (stepAssignInfo is null) return;
                     if (stepAssignInfo is null) return;
                     var validator = new StepAssignInfoValidator();
                     var validator = new StepAssignInfoValidator();
                     await validator.ValidateAndThrowAsync(stepAssignInfo, HttpContext.RequestAborted);
                     await validator.ValidateAndThrowAsync(stepAssignInfo, HttpContext.RequestAborted);
 
 
-                    newStep.Assign(stepAssignInfo);
+                    targetStepNew.Assign(stepAssignInfo);
                 },
                 },
                 HttpContext.RequestAborted);
                 HttpContext.RequestAborted);
 
 
@@ -6037,9 +6043,9 @@ public class OrderController : BaseController
             {
             {
                 order.CenterToOrgHandlerId = newStep.HandlerId;
                 order.CenterToOrgHandlerId = newStep.HandlerId;
                 order.CenterToOrgHandlerName = newStep.HandlerName;
                 order.CenterToOrgHandlerName = newStep.HandlerName;
-                await _orderRepository.Updateable(order)
-                    .UpdateColumns(d => new { d.CenterToOrgHandlerId, d.CenterToOrgHandlerName })
-                    .ExecuteCommandAsync(HttpContext.RequestAborted);
+                // await _orderRepository.Updateable(order)
+                //     .UpdateColumns(d => new { d.CenterToOrgHandlerId, d.CenterToOrgHandlerName })
+                //     .ExecuteCommandAsync(HttpContext.RequestAborted);
             }
             }
 
 
             if (order.Status >= EOrderStatus.Filed)
             if (order.Status >= EOrderStatus.Filed)
@@ -6079,19 +6085,20 @@ public class OrderController : BaseController
                         new PublishSpecialDto { Order = _mapper.Map<OrderDto>(order), Special = _mapper.Map<OrderSpecialDto>(model) },
                         new PublishSpecialDto { Order = _mapper.Map<OrderDto>(order), Special = _mapper.Map<OrderSpecialDto>(model) },
                         cancellationToken: HttpContext.RequestAborted);
                         cancellationToken: HttpContext.RequestAborted);
                 }
                 }
-
-                //try
-                //{
-                //    await _provinceService.RevokeOrder(
-                //        new PublishSpecialDto
-                //        { Order = _mapper.Map<OrderDto>(order), Special = _mapper.Map<OrderSpecialDto>(model) },
-                //        HttpContext.RequestAborted);
-                //}
-                //catch (Exception e)
-                //{
-                //    _logger.LogError("_provinceService.RevokeOrder throw exception: {ex}", e.Message);
-                //}
             }
             }
+            
+            await _orderRepository.Updateable(order)
+                .UpdateColumns(d => new
+                {
+                    d.CenterToOrgHandlerId,
+                    d.CenterToOrgHandlerName,
+                    d.ExpiredTime,
+                    d.NearlyExpiredTime,
+                    d.NearlyExpiredTimeOne,
+                    d.ProcessType,
+                    d.Status,
+                })
+                .ExecuteCommandAsync(HttpContext.RequestAborted);
         }
         }
         else
         else
         {
         {
@@ -6260,15 +6267,15 @@ public class OrderController : BaseController
             var (workflow, targetStepDefine, currentStep, targetStep, newStep, isOrgToCenter) = await _workflowDomainService.RecallAsync(
             var (workflow, targetStepDefine, currentStep, targetStep, newStep, isOrgToCenter) = await _workflowDomainService.RecallAsync(
                 recall, recall.NextHandlers.FirstOrDefault(), EWorkflowTraceType.Redo,
                 recall, recall.NextHandlers.FirstOrDefault(), EWorkflowTraceType.Redo,
                 endTime, order.Status >= EOrderStatus.Filed, EHandleMode.Redo,
                 endTime, order.Status >= EOrderStatus.Filed, EHandleMode.Redo,
-                async (workflow, prevStepDefine, prevStep, newStep) =>
+                async (workflow, currentStep, targetStepDefine, targetStep, targetStepNew) =>
                 {
                 {
                     var stepAssignInfo = recall.NextHandlers.FirstOrDefault()
                     var stepAssignInfo = recall.NextHandlers.FirstOrDefault()
-                                         ?? await _orderApplication.GetOrderRecallAssignInfoAsync(workflow, prevStep, prevStepDefine,
+                                         ?? await _orderApplication.GetOrderRecallAssignInfoAsync(workflow, targetStepDefine, targetStep,
                                              recall, HttpContext.RequestAborted);
                                              recall, HttpContext.RequestAborted);
                     if (stepAssignInfo is null) return;
                     if (stepAssignInfo is null) return;
                     var validator = new StepAssignInfoValidator();
                     var validator = new StepAssignInfoValidator();
                     await validator.ValidateAndThrowAsync(stepAssignInfo, HttpContext.RequestAborted);
                     await validator.ValidateAndThrowAsync(stepAssignInfo, HttpContext.RequestAborted);
-                    newStep.Assign(stepAssignInfo);
+                    targetStepNew.Assign(stepAssignInfo);
                 }, HttpContext.RequestAborted);
                 }, HttpContext.RequestAborted);
 
 
             //记录特提后最新的流程节点
             //记录特提后最新的流程节点
@@ -6462,15 +6469,15 @@ public class OrderController : BaseController
             var (workflow, targetStepDefine, currentStep, targetStep, newStep, isOrgToCenter) = await _workflowDomainService.RecallAsync(
             var (workflow, targetStepDefine, currentStep, targetStep, newStep, isOrgToCenter) = await _workflowDomainService.RecallAsync(
                 recall, recall.NextHandlers.FirstOrDefault(), EWorkflowTraceType.Recall,
                 recall, recall.NextHandlers.FirstOrDefault(), EWorkflowTraceType.Recall,
                 expiredTime.ExpiredTime, order.Status >= EOrderStatus.Filed, EHandleMode.Recall,
                 expiredTime.ExpiredTime, order.Status >= EOrderStatus.Filed, EHandleMode.Recall,
-                async (workflow, prevStepDefine, prevStep, newStep) =>
+                async (workflow, currentStep, targetStepDefine, targetStep, targetStepNew) =>
                 {
                 {
                     var stepAssignInfo = recall.NextHandlers.FirstOrDefault()
                     var stepAssignInfo = recall.NextHandlers.FirstOrDefault()
-                                         ?? await _orderApplication.GetOrderRecallAssignInfoAsync(workflow,  prevStep,prevStepDefine,
+                                         ?? await _orderApplication.GetOrderRecallAssignInfoAsync(workflow,  targetStepDefine, targetStep,
                                              recall, HttpContext.RequestAborted);
                                              recall, HttpContext.RequestAborted);
                     if (stepAssignInfo is null) return;
                     if (stepAssignInfo is null) return;
                     var validator = new StepAssignInfoValidator();
                     var validator = new StepAssignInfoValidator();
                     await validator.ValidateAndThrowAsync(stepAssignInfo, HttpContext.RequestAborted);
                     await validator.ValidateAndThrowAsync(stepAssignInfo, HttpContext.RequestAborted);
-                    newStep.Assign(stepAssignInfo);
+                    targetStepNew.Assign(stepAssignInfo);
                 }, HttpContext.RequestAborted);
                 }, HttpContext.RequestAborted);
 
 
             if (_appOptions.Value.IsZiGong && dto.BusinessType == EBusinessType.Send)
             if (_appOptions.Value.IsZiGong && dto.BusinessType == EBusinessType.Send)
@@ -6650,15 +6657,15 @@ public class OrderController : BaseController
                 var (workflow, targetStepDefine, currentStep, targetStep, newStep, isOrgToCenter) = await _workflowDomainService.RecallAsync(
                 var (workflow, targetStepDefine, currentStep, targetStep, newStep, isOrgToCenter) = await _workflowDomainService.RecallAsync(
                     recall, recall.NextHandlers.FirstOrDefault(), EWorkflowTraceType.Recall,
                     recall, recall.NextHandlers.FirstOrDefault(), EWorkflowTraceType.Recall,
                     expiredTime.ExpiredTime, order.Status >= EOrderStatus.Filed, EHandleMode.Recall,
                     expiredTime.ExpiredTime, order.Status >= EOrderStatus.Filed, EHandleMode.Recall,
-                    async (workflow, prevStepDefine, prevStep, newStep) =>
+                    async (workflow, currentStep, targetStepDefine, targetStep, targetStepNew) =>
                     {
                     {
                         var stepAssignInfo = recall.NextHandlers.FirstOrDefault()
                         var stepAssignInfo = recall.NextHandlers.FirstOrDefault()
-                                             ?? await _orderApplication.GetOrderRecallAssignInfoAsync(workflow,  prevStep,prevStepDefine,
+                                             ?? await _orderApplication.GetOrderRecallAssignInfoAsync(workflow,  targetStepDefine, targetStep,
                                                  recall, HttpContext.RequestAborted);
                                                  recall, HttpContext.RequestAborted);
                         if (stepAssignInfo is null) return;
                         if (stepAssignInfo is null) return;
                         var validator = new StepAssignInfoValidator();
                         var validator = new StepAssignInfoValidator();
                         await validator.ValidateAndThrowAsync(stepAssignInfo, HttpContext.RequestAborted);
                         await validator.ValidateAndThrowAsync(stepAssignInfo, HttpContext.RequestAborted);
-                        newStep.Assign(stepAssignInfo);
+                        targetStepNew.Assign(stepAssignInfo);
                     }, HttpContext.RequestAborted);
                     }, HttpContext.RequestAborted);
 
 
                 if (_appOptions.Value.IsZiGong && dto.BusinessType == EBusinessType.Send)
                 if (_appOptions.Value.IsZiGong && dto.BusinessType == EBusinessType.Send)

+ 1 - 1
src/Hotline.Application/Orders/IOrderApplication.cs

@@ -417,7 +417,7 @@ namespace Hotline.Application.Orders
         /// <summary>
         /// <summary>
         /// 查询特提操作目标节点的指派对象
         /// 查询特提操作目标节点的指派对象
         /// </summary>
         /// </summary>
-        Task<StepAssignInfo?> GetOrderRecallAssignInfoAsync(Workflow workflow, StepDefine targetStepDefine, WorkflowStep currentStep,
+        Task<StepAssignInfo?> GetOrderRecallAssignInfoAsync(Workflow workflow, StepDefine targetStepDefine, WorkflowStep targetStep,
             BasicWorkflowDto dto, CancellationToken cancellationToken);
             BasicWorkflowDto dto, CancellationToken cancellationToken);
     }
     }
 }
 }

+ 255 - 213
src/Hotline.Application/Orders/OrderApplication.cs

@@ -350,7 +350,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
                                 (step.FlowAssignType == EFlowAssignType.Role && !string.IsNullOrEmpty(step.RoleId) &&
                                 (step.FlowAssignType == EFlowAssignType.Role && !string.IsNullOrEmpty(step.RoleId) &&
                                  _sessionContextProvider.SessionContext.Roles.Contains(step.RoleId))))
                                  _sessionContextProvider.SessionContext.Roles.Contains(step.RoleId))))
                 .Any())
                 .Any())
-             .WhereIF(orgLevel == 2 || orgLevel == 1, d => SqlFunc.Subqueryable<WorkflowStep>()
+            .WhereIF(orgLevel == 2 || orgLevel == 1, d => SqlFunc.Subqueryable<WorkflowStep>()
                 .Where(step => step.ExternalId == d.Id &&
                 .Where(step => step.ExternalId == d.Id &&
                                step.Status != EWorkflowStepStatus.Handled &&
                                step.Status != EWorkflowStepStatus.Handled &&
                                (!string.IsNullOrEmpty(step.HandlerOrgId) && step.HandlerOrgId.StartsWith(orgCode)))
                                (!string.IsNullOrEmpty(step.HandlerOrgId) && step.HandlerOrgId.StartsWith(orgCode)))
@@ -368,16 +368,16 @@ public class OrderApplication : IOrderApplication, IScopeDependency
             .WhereIF(dto.ExpiredTimeStart.HasValue, d => d.ExpiredTime >= dto.ExpiredTimeStart) //超期时间开始
             .WhereIF(dto.ExpiredTimeStart.HasValue, d => d.ExpiredTime >= dto.ExpiredTimeStart) //超期时间开始
             .WhereIF(dto.ExpiredTimeEnd.HasValue, d => d.ExpiredTime <= dto.ExpiredTimeEnd) //超期时间结束
             .WhereIF(dto.ExpiredTimeEnd.HasValue, d => d.ExpiredTime <= dto.ExpiredTimeEnd) //超期时间结束
             .WhereIF(!string.IsNullOrEmpty(dto.ActualHandleOrgName), d => d.ActualHandleOrgName.Contains(dto.ActualHandleOrgName)) //接办部门
             .WhereIF(!string.IsNullOrEmpty(dto.ActualHandleOrgName), d => d.ActualHandleOrgName.Contains(dto.ActualHandleOrgName)) //接办部门
-                                                                                                                                   //&& stTime >= d.ExpiredTime.Value && stTime2 <= d.ExpiredTime.Value
-                                                                                                                                   //.Where(d => d.ExpiredTime != null &&
-                                                                                                                                   //         d.Status != EOrderStatus.Filed && d.Status != EOrderStatus.Published && d.Status != EOrderStatus.Visited && stTime >= d.ExpiredTime.Value && stTime2 <= d.ExpiredTime.Value)
+            //&& stTime >= d.ExpiredTime.Value && stTime2 <= d.ExpiredTime.Value
+            //.Where(d => d.ExpiredTime != null &&
+            //         d.Status != EOrderStatus.Filed && d.Status != EOrderStatus.Published && d.Status != EOrderStatus.Visited && stTime >= d.ExpiredTime.Value && stTime2 <= d.ExpiredTime.Value)
             .Where(d => d.Status < EOrderStatus.Filed && dateTime > d.NearlyExpiredTime && dateTime < d.ExpiredTime)
             .Where(d => d.Status < EOrderStatus.Filed && dateTime > d.NearlyExpiredTime && dateTime < d.ExpiredTime)
             .OrderByIF(dto is { SortField: "no", SortRule: 0 }, x => x.No, OrderByType.Asc) //工单编号升序
             .OrderByIF(dto is { SortField: "no", SortRule: 0 }, x => x.No, OrderByType.Asc) //工单编号升序
             .OrderByIF(dto is { SortField: "no", SortRule: 1 }, x => x.No, OrderByType.Desc) //工单编号降序
             .OrderByIF(dto is { SortField: "no", SortRule: 1 }, x => x.No, OrderByType.Desc) //工单编号降序
-            .OrderByIF(dto is { SortField: "isProvinceText", SortRule: 0 }, x => x.IsProvince, OrderByType.Asc)//是否省工单升序
-            .OrderByIF(dto is { SortField: "isProvinceText", SortRule: 1 }, x => x.IsProvince, OrderByType.Desc)//是否省工单降序
-            .OrderByIF(dto is { SortField: "currentStepName", SortRule: 0 }, x => x.CurrentStepName, OrderByType.Asc)//当前节点升序
-            .OrderByIF(dto is { SortField: "currentStepName", SortRule: 1 }, x => x.CurrentStepName, OrderByType.Desc)//当前节点降序
+            .OrderByIF(dto is { SortField: "isProvinceText", SortRule: 0 }, x => x.IsProvince, OrderByType.Asc) //是否省工单升序
+            .OrderByIF(dto is { SortField: "isProvinceText", SortRule: 1 }, x => x.IsProvince, OrderByType.Desc) //是否省工单降序
+            .OrderByIF(dto is { SortField: "currentStepName", SortRule: 0 }, x => x.CurrentStepName, OrderByType.Asc) //当前节点升序
+            .OrderByIF(dto is { SortField: "currentStepName", SortRule: 1 }, x => x.CurrentStepName, OrderByType.Desc) //当前节点降序
             .OrderByIF(dto is { SortField: "delayText", SortRule: 0 }, x => x.OrderDelays.Count, OrderByType.Asc) //是否延期升序
             .OrderByIF(dto is { SortField: "delayText", SortRule: 0 }, x => x.OrderDelays.Count, OrderByType.Asc) //是否延期升序
             .OrderByIF(dto is { SortField: "delayText", SortRule: 1 }, x => x.OrderDelays.Count, OrderByType.Desc) //是否延期升序
             .OrderByIF(dto is { SortField: "delayText", SortRule: 1 }, x => x.OrderDelays.Count, OrderByType.Desc) //是否延期升序
             .OrderByIF(dto is { SortField: "statusText", SortRule: 0 }, x => x.Status, OrderByType.Asc) //工单状态升序
             .OrderByIF(dto is { SortField: "statusText", SortRule: 0 }, x => x.Status, OrderByType.Asc) //工单状态升序
@@ -386,18 +386,18 @@ public class OrderApplication : IOrderApplication, IScopeDependency
             .OrderByIF(dto is { SortField: "startTime", SortRule: 1 }, x => x.StartTime, OrderByType.Desc) //受理时间降序
             .OrderByIF(dto is { SortField: "startTime", SortRule: 1 }, x => x.StartTime, OrderByType.Desc) //受理时间降序
             .OrderByIF(dto is { SortField: "expiredTime", SortRule: 0 }, x => x.ExpiredTime, OrderByType.Asc) //期满时间升序
             .OrderByIF(dto is { SortField: "expiredTime", SortRule: 0 }, x => x.ExpiredTime, OrderByType.Asc) //期满时间升序
             .OrderByIF(dto is { SortField: "expiredTime", SortRule: 1 }, x => x.ExpiredTime, OrderByType.Desc) //期满时间降序
             .OrderByIF(dto is { SortField: "expiredTime", SortRule: 1 }, x => x.ExpiredTime, OrderByType.Desc) //期满时间降序
-            .OrderByIF(dto is { SortField: "actualHandleOrgName", SortRule: 0 }, x => x.ActualHandleOrgName, OrderByType.Asc)// 接办部门升序
-            .OrderByIF(dto is { SortField: "actualHandleOrgName", SortRule: 1 }, x => x.ActualHandleOrgName, OrderByType.Desc)// 接办部门降序
+            .OrderByIF(dto is { SortField: "actualHandleOrgName", SortRule: 0 }, x => x.ActualHandleOrgName, OrderByType.Asc) // 接办部门升序
+            .OrderByIF(dto is { SortField: "actualHandleOrgName", SortRule: 1 }, x => x.ActualHandleOrgName, OrderByType.Desc) // 接办部门降序
             .OrderByIF(dto is { SortField: "acceptType", SortRule: 0 }, x => x.AcceptTypeCode, OrderByType.Asc) //受理类型升序
             .OrderByIF(dto is { SortField: "acceptType", SortRule: 0 }, x => x.AcceptTypeCode, OrderByType.Asc) //受理类型升序
             .OrderByIF(dto is { SortField: "acceptType", SortRule: 1 }, x => x.AcceptTypeCode, OrderByType.Desc) //受理类型降序
             .OrderByIF(dto is { SortField: "acceptType", SortRule: 1 }, x => x.AcceptTypeCode, OrderByType.Desc) //受理类型降序
             .OrderByIF(dto is { SortField: "counterSignTypeText", SortRule: 0 }, x => x.CounterSignType, OrderByType.Asc) //是否会签升序
             .OrderByIF(dto is { SortField: "counterSignTypeText", SortRule: 0 }, x => x.CounterSignType, OrderByType.Asc) //是否会签升序
             .OrderByIF(dto is { SortField: "counterSignTypeText", SortRule: 1 }, x => x.CounterSignType, OrderByType.Desc) //是否会签降序
             .OrderByIF(dto is { SortField: "counterSignTypeText", SortRule: 1 }, x => x.CounterSignType, OrderByType.Desc) //是否会签降序
             .OrderByIF(dto is { SortField: "orgLevelOneName", SortRule: 0 }, x => x.OrgLevelOneName, OrderByType.Asc) //一级部门升序
             .OrderByIF(dto is { SortField: "orgLevelOneName", SortRule: 0 }, x => x.OrgLevelOneName, OrderByType.Asc) //一级部门升序
-            .OrderByIF(dto is { SortField: "orgLevelOneName", SortRule: 1 }, x => x.OrgLevelOneName, OrderByType.Desc)//一级部门降序
+            .OrderByIF(dto is { SortField: "orgLevelOneName", SortRule: 1 }, x => x.OrgLevelOneName, OrderByType.Desc) //一级部门降序
             .OrderByIF(dto is { SortField: "hotspotName", SortRule: 0 }, x => x.HotspotId, OrderByType.Asc) //热点升序
             .OrderByIF(dto is { SortField: "hotspotName", SortRule: 0 }, x => x.HotspotId, OrderByType.Asc) //热点升序
             .OrderByIF(dto is { SortField: "hotspotName", SortRule: 1 }, x => x.HotspotId, OrderByType.Desc) //热点降序
             .OrderByIF(dto is { SortField: "hotspotName", SortRule: 1 }, x => x.HotspotId, OrderByType.Desc) //热点降序
-            .OrderByIF(dto is { SortField: "acceptorName", SortRule: 0 }, x => x.AcceptorName, OrderByType.Asc)// 受理人升序
-            .OrderByIF(dto is { SortField: "acceptorName", SortRule: 1 }, x => x.AcceptorName, OrderByType.Desc);// 受理人升序
+            .OrderByIF(dto is { SortField: "acceptorName", SortRule: 0 }, x => x.AcceptorName, OrderByType.Asc) // 受理人升序
+            .OrderByIF(dto is { SortField: "acceptorName", SortRule: 1 }, x => x.AcceptorName, OrderByType.Desc); // 受理人升序
     }
     }
 
 
     /// <summary>
     /// <summary>
@@ -764,10 +764,10 @@ public class OrderApplication : IOrderApplication, IScopeDependency
             .WhereIF(!string.IsNullOrEmpty(dto.Hotspot), d => d.HotspotSpliceName != null && d.HotspotSpliceName.Contains(dto.Hotspot))
             .WhereIF(!string.IsNullOrEmpty(dto.Hotspot), d => d.HotspotSpliceName != null && d.HotspotSpliceName.Contains(dto.Hotspot))
             .WhereIF(!string.IsNullOrEmpty(dto.OrgLevelOneName), d => d.OrgLevelOneName.Contains(dto.OrgLevelOneName)) //一级部门
             .WhereIF(!string.IsNullOrEmpty(dto.OrgLevelOneName), d => d.OrgLevelOneName.Contains(dto.OrgLevelOneName)) //一级部门
             .WhereIF(!string.IsNullOrEmpty(dto.FromPhone), d => d.FromPhone == dto.FromPhone) //来电号码
             .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 == true, d => d.Source == ESource.ProvinceStraight)
             .WhereIF(dto.IsProvinceOrder.HasValue && dto.IsProvinceOrder == false, 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)
             //.WhereIF(dto.FiledType != null && dto.FiledType == FiledType.CenterFiled, d => d.ProcessType == EProcessType.Zhiban)
@@ -851,7 +851,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
     public async Task<(int, IList<PublishedOrderStatisticsDto>)> QueryPublishedOrderAsync(QueryOrderPublishStatisticsDto dto, bool isFull)
     public async Task<(int, IList<PublishedOrderStatisticsDto>)> QueryPublishedOrderAsync(QueryOrderPublishStatisticsDto dto, bool isFull)
     {
     {
         var orders = await _orderRepository.Queryable()
         var orders = await _orderRepository.Queryable()
-           .LeftJoin<User>((order, user) => order.WaitForPublisherId == user.Id)
+            .LeftJoin<User>((order, user) => order.WaitForPublisherId == user.Id)
             .Where((order, user) => !string.IsNullOrEmpty(order.WaitForPublisherId))
             .Where((order, user) => !string.IsNullOrEmpty(order.WaitForPublisherId))
             .WhereIF(dto.ProcessType != null && dto.ProcessType == EProcessType.Zhiban, (order, user) => order.FileOrgIsCenter == true)
             .WhereIF(dto.ProcessType != null && dto.ProcessType == EProcessType.Zhiban, (order, user) => order.FileOrgIsCenter == true)
             .WhereIF(dto.ProcessType != null && dto.ProcessType == EProcessType.Jiaoban, (order, user) => order.FileOrgIsCenter == false)
             .WhereIF(dto.ProcessType != null && dto.ProcessType == EProcessType.Jiaoban, (order, user) => order.FileOrgIsCenter == false)
@@ -894,16 +894,16 @@ public class OrderApplication : IOrderApplication, IScopeDependency
         }
         }
 
 
         var res = (from t1 in items
         var res = (from t1 in items
-                   join t2 in orders on t1.Name equals t2.Name into t1_t2
-                   from item in t1_t2.DefaultIfEmpty()
-                   select new PublishedOrderStatisticsDto
-                   {
-                       Name = t1.Name,
-                       PublishTime = t1.PublishTime,
-                       WaitCount = t1_t2.Select(x => x.WaitCount).FirstOrDefault(),
-                       PublicCount = t1.PublicCount,
-                       PrivateCount = t1.PrivateCount
-                   }).ToList();
+            join t2 in orders on t1.Name equals t2.Name into t1_t2
+            from item in t1_t2.DefaultIfEmpty()
+            select new PublishedOrderStatisticsDto
+            {
+                Name = t1.Name,
+                PublishTime = t1.PublishTime,
+                WaitCount = t1_t2.Select(x => x.WaitCount).FirstOrDefault(),
+                PublicCount = t1.PublicCount,
+                PrivateCount = t1.PrivateCount
+            }).ToList();
 
 
         return (total, res);
         return (total, res);
     }
     }
@@ -931,7 +931,8 @@ public class OrderApplication : IOrderApplication, IScopeDependency
 
 
         var query = _orderRepository.Queryable()
         var query = _orderRepository.Queryable()
             .Includes(order => order.OrderPublish)
             .Includes(order => order.OrderPublish)
-            .Where(order => order.OrderPublish.CreationTime >= dto.StartTime && order.OrderPublish.CreationTime <= dto.EndTime && order.ActualHandleOrgName != null)
+            .Where(order => order.OrderPublish.CreationTime >= dto.StartTime && order.OrderPublish.CreationTime <= dto.EndTime &&
+                            order.ActualHandleOrgName != null)
             .GroupBy(order => new { Name = order.ActualHandleOrgName, PublishTime = order.CreationTime.ToString("YYYY-MM-DD") })
             .GroupBy(order => new { Name = order.ActualHandleOrgName, PublishTime = order.CreationTime.ToString("YYYY-MM-DD") })
             .Select(order => new PublishedOrderStatisticsDto
             .Select(order => new PublishedOrderStatisticsDto
             {
             {
@@ -952,16 +953,16 @@ public class OrderApplication : IOrderApplication, IScopeDependency
         }
         }
 
 
         var res = (from t1 in items
         var res = (from t1 in items
-                   join t2 in orders on t1.Name equals t2.Name into t1_t2
-                   from item in t1_t2.DefaultIfEmpty()
-                   select new PublishedOrderStatisticsDto
-                   {
-                       Name = t1.Name,
-                       PublishTime = t1.PublishTime,
-                       WaitCount = t1_t2.Select(x => x.WaitCount).FirstOrDefault(),
-                       PublicCount = t1.PublicCount,
-                       PrivateCount = t1.PrivateCount
-                   }).ToList();
+            join t2 in orders on t1.Name equals t2.Name into t1_t2
+            from item in t1_t2.DefaultIfEmpty()
+            select new PublishedOrderStatisticsDto
+            {
+                Name = t1.Name,
+                PublishTime = t1.PublishTime,
+                WaitCount = t1_t2.Select(x => x.WaitCount).FirstOrDefault(),
+                PublicCount = t1.PublicCount,
+                PrivateCount = t1.PrivateCount
+            }).ToList();
 
 
         return (total, res);
         return (total, res);
     }
     }
@@ -1023,6 +1024,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
                     _mapper.Map(detaildto, visit.OrderVisitDetails[i]);
                     _mapper.Map(detaildto, visit.OrderVisitDetails[i]);
                 }
                 }
             }
             }
+
             var seat = visit.OrderVisitDetails.FirstOrDefault(x => x.VisitTarget == EVisitTarget.Seat);
             var seat = visit.OrderVisitDetails.FirstOrDefault(x => x.VisitTarget == EVisitTarget.Seat);
             seat.SeatEvaluate = ESeatEvaluate.DefaultSatisfied;
             seat.SeatEvaluate = ESeatEvaluate.DefaultSatisfied;
             seat.VoiceEvaluate = EVoiceEvaluate.DefaultSatisfied;
             seat.VoiceEvaluate = EVoiceEvaluate.DefaultSatisfied;
@@ -1464,15 +1466,15 @@ public class OrderApplication : IOrderApplication, IScopeDependency
                 .WhereIF(dto.IsReTransact.HasValue && dto.IsReTransact.Value == false, d => d.ReTransactNum == null || d.ReTransactNum == 0)
                 .WhereIF(dto.IsReTransact.HasValue && dto.IsReTransact.Value == false, d => d.ReTransactNum == null || d.ReTransactNum == 0)
                 .WhereIF(!string.IsNullOrEmpty(dto.No), d => d.No.Contains(dto.No)) //工单编码
                 .WhereIF(!string.IsNullOrEmpty(dto.No), d => d.No.Contains(dto.No)) //工单编码
                 .WhereIF(!string.IsNullOrEmpty(dto.AcceptType), d => d.AcceptTypeCode == dto.AcceptType) //受理类型
                 .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.Channel), d => d.SourceChannelCode == dto.Channel)
                 //.WhereIF(dto.Channels.Any(), d => dto.Channels.Contains(d.SourceChannelCode)) //来源渠道
                 //.WhereIF(dto.Channels.Any(), d => dto.Channels.Contains(d.SourceChannelCode)) //来源渠道
                 //.WhereIF(dto.HotspotIds.Any(), d => dto.HotspotIds.Contains(d.HotspotId)) //热点类型
                 //.WhereIF(dto.HotspotIds.Any(), d => dto.HotspotIds.Contains(d.HotspotId)) //热点类型
                 .WhereIF(!string.IsNullOrEmpty(dto.Hotspot), d => d.HotspotSpliceName != null && d.HotspotSpliceName.Contains(dto.Hotspot))
                 .WhereIF(!string.IsNullOrEmpty(dto.Hotspot), d => d.HotspotSpliceName != null && d.HotspotSpliceName.Contains(dto.Hotspot))
                 .WhereIF(!string.IsNullOrEmpty(dto.TransferPhone), d => d.TransferPhone == dto.TransferPhone!) //转接号码
                 .WhereIF(!string.IsNullOrEmpty(dto.TransferPhone), d => d.TransferPhone == dto.TransferPhone!) //转接号码
-                                                                                                               //.WhereIF(dto.OrgCodes.Any(), d => d.Workflow.Assigns.Any(s => dto.OrgCodes.Contains(s.OrgCode)))
-                                                                                                               //.WhereIF(dto.OrgCodes.Any(), d => dto.OrgCodes.Contains(d.ActualHandleOrgCode)) //接办部门
-                                                                                                               //.WhereIF(!string.IsNullOrEmpty(dto.OrgId), d => d.CurrentHandleOrgId == dto.OrgId)//接办部门
+                //.WhereIF(dto.OrgCodes.Any(), d => d.Workflow.Assigns.Any(s => dto.OrgCodes.Contains(s.OrgCode)))
+                //.WhereIF(dto.OrgCodes.Any(), d => dto.OrgCodes.Contains(d.ActualHandleOrgCode)) //接办部门
+                //.WhereIF(!string.IsNullOrEmpty(dto.OrgId), d => d.CurrentHandleOrgId == dto.OrgId)//接办部门
                 .WhereIF(!string.IsNullOrEmpty(dto.OrgLevelOneName), d => d.OrgLevelOneName.Contains(dto.OrgLevelOneName)) //一级部门
                 .WhereIF(!string.IsNullOrEmpty(dto.OrgLevelOneName), d => d.OrgLevelOneName.Contains(dto.OrgLevelOneName)) //一级部门
                 .WhereIF(!string.IsNullOrEmpty(dto.ActualHandleOrgName), d => d.ActualHandleOrgName.Contains(dto.ActualHandleOrgName)) //接办部门(综合查询模糊)
                 .WhereIF(!string.IsNullOrEmpty(dto.ActualHandleOrgName), d => d.ActualHandleOrgName.Contains(dto.ActualHandleOrgName)) //接办部门(综合查询模糊)
                 .WhereIF(!string.IsNullOrEmpty(dto.NameOrNo), d => d.AcceptorName == dto.NameOrNo! || d.AcceptorStaffNo == dto.NameOrNo!) //受理人/坐席
                 .WhereIF(!string.IsNullOrEmpty(dto.NameOrNo), d => d.AcceptorName == dto.NameOrNo! || d.AcceptorStaffNo == dto.NameOrNo!) //受理人/坐席
@@ -1480,16 +1482,16 @@ public class OrderApplication : IOrderApplication, IScopeDependency
                 .WhereIF(dto.CreationTimeEnd.HasValue, d => d.CreationTime <= dto.CreationTimeEnd) //受理时间结束
                 .WhereIF(dto.CreationTimeEnd.HasValue, d => d.CreationTime <= dto.CreationTimeEnd) //受理时间结束
                 .WhereIF(dto.StartTimeStart.HasValue, d => d.StartTime >= dto.StartTimeStart) //流程开启时间开始
                 .WhereIF(dto.StartTimeStart.HasValue, d => d.StartTime >= dto.StartTimeStart) //流程开启时间开始
                 .WhereIF(dto.StartTimeEnd.HasValue, d => d.StartTime <= dto.StartTimeEnd) //流程开启时间结束
                 .WhereIF(dto.StartTimeEnd.HasValue, d => d.StartTime <= dto.StartTimeEnd) //流程开启时间结束
-                                                                                          //.WhereIF(dto.EmergencyLevels.Any(), d => dto.EmergencyLevels.Contains(d.EmergencyLevel))  //紧急程度
+                //.WhereIF(dto.EmergencyLevels.Any(), d => dto.EmergencyLevels.Contains(d.EmergencyLevel))  //紧急程度
                 .WhereIF(!string.IsNullOrEmpty(dto.FromPhone), d => d.FromPhone.Contains(dto.FromPhone)) //来电号码
                 .WhereIF(!string.IsNullOrEmpty(dto.FromPhone), d => d.FromPhone.Contains(dto.FromPhone)) //来电号码
                 .WhereIF(!string.IsNullOrEmpty(dto.PhoneNo), d => d.Contact.Contains(dto.PhoneNo)) //联系电话
                 .WhereIF(!string.IsNullOrEmpty(dto.PhoneNo), d => d.Contact.Contains(dto.PhoneNo)) //联系电话
-                                                                                                   //.WhereIF(!string.IsNullOrEmpty(dto.PushTypeCode), d => d.PushTypeCode == dto.PushTypeCode) //推送分类
+                //.WhereIF(!string.IsNullOrEmpty(dto.PushTypeCode), d => d.PushTypeCode == dto.PushTypeCode) //推送分类
                 .WhereIF(!string.IsNullOrEmpty(dto.PushTypeCode), x => x.OrderPushTypes.Any(opt => opt.PushTypeCode == dto.PushTypeCode)) //推送分类
                 .WhereIF(!string.IsNullOrEmpty(dto.PushTypeCode), x => x.OrderPushTypes.Any(opt => opt.PushTypeCode == dto.PushTypeCode)) //推送分类
                 .WhereIF(dto.ExpiredTimeStart.HasValue, d => d.ExpiredTime >= dto.ExpiredTimeStart) //超期时间开始
                 .WhereIF(dto.ExpiredTimeStart.HasValue, d => d.ExpiredTime >= dto.ExpiredTimeStart) //超期时间开始
                 .WhereIF(dto.ExpiredTimeEnd.HasValue, d => d.ExpiredTime <= dto.ExpiredTimeEnd) //超期时间结束
                 .WhereIF(dto.ExpiredTimeEnd.HasValue, d => d.ExpiredTime <= dto.ExpiredTimeEnd) //超期时间结束
-                                                                                                //.WhereIF(dto.Statuses.Any(), d => dto.Statuses.Contains(d.Status))  //工单状态
+                //.WhereIF(dto.Statuses.Any(), d => dto.Statuses.Contains(d.Status))  //工单状态
                 .WhereIF(dto.Status.HasValue, d => d.Status == dto.Status) //工单状态
                 .WhereIF(dto.Status.HasValue, d => d.Status == dto.Status) //工单状态
-                                                                           //.WhereIF(dto.Statuses.Any(d => d == EOrderStatus.SpecialToUnAccept), d => d.Status <= EOrderStatus.SpecialToUnAccept)
+                //.WhereIF(dto.Statuses.Any(d => d == EOrderStatus.SpecialToUnAccept), d => d.Status <= EOrderStatus.SpecialToUnAccept)
                 .WhereIF(!string.IsNullOrEmpty(dto.ActualHandlerName), d => d.ActualHandlerName == dto.ActualHandlerName) //接办人
                 .WhereIF(!string.IsNullOrEmpty(dto.ActualHandlerName), d => d.ActualHandlerName == dto.ActualHandlerName) //接办人
                 .WhereIF(dto.IsScreen == true, d => d.OrderScreens.Any(x => x.Status != EScreenStatus.Refuse)) //有甄别
                 .WhereIF(dto.IsScreen == true, d => d.OrderScreens.Any(x => x.Status != EScreenStatus.Refuse)) //有甄别
                 .WhereIF(dto.IsScreen == false, d => !d.OrderScreens.Any(x => x.Status != EScreenStatus.Refuse)) //无甄别
                 .WhereIF(dto.IsScreen == false, d => !d.OrderScreens.Any(x => x.Status != EScreenStatus.Refuse)) //无甄别
@@ -1504,8 +1506,8 @@ public class OrderApplication : IOrderApplication, IScopeDependency
                          (d.ExpiredTime > d.FiledTime && d.Status >= EOrderStatus.Filed)) //否 超期
                          (d.ExpiredTime > d.FiledTime && d.Status >= EOrderStatus.Filed)) //否 超期
                 .WhereIF(dto.IdentityType != null, d => d.IdentityType == dto.IdentityType) //来电主体
                 .WhereIF(dto.IdentityType != null, d => d.IdentityType == dto.IdentityType) //来电主体
                 .WhereIF(!string.IsNullOrEmpty(dto.FromName), d => d.FromName == dto.FromName) //来电人姓名
                 .WhereIF(!string.IsNullOrEmpty(dto.FromName), d => d.FromName == dto.FromName) //来电人姓名
-                                                                                               //.WhereIF(dto.AreaCodes.Any(), d => dto.AreaCodes.Contains(d.AreaCode)) //区域
-                                                                                               //.WhereIF(!string.IsNullOrEmpty(dto.AreaCode), d => d.AreaCode == dto.AreaCode)//区域
+                //.WhereIF(dto.AreaCodes.Any(), d => dto.AreaCodes.Contains(d.AreaCode)) //区域
+                //.WhereIF(!string.IsNullOrEmpty(dto.AreaCode), d => d.AreaCode == dto.AreaCode)//区域
                 .WhereIF(!string.IsNullOrEmpty(dto.AreaCode) && dto.AreaCode.LastIndexOf("00") > 0,
                 .WhereIF(!string.IsNullOrEmpty(dto.AreaCode) && dto.AreaCode.LastIndexOf("00") > 0,
                     d => d.AreaCode.StartsWith(SqlFunc.Substring(dto.AreaCode, 0, 4)))
                     d => d.AreaCode.StartsWith(SqlFunc.Substring(dto.AreaCode, 0, 4)))
                 .WhereIF(!string.IsNullOrEmpty(dto.AreaCode) && dto.AreaCode.LastIndexOf("00") <= 0, d => d.AreaCode.StartsWith(dto.AreaCode))
                 .WhereIF(!string.IsNullOrEmpty(dto.AreaCode) && dto.AreaCode.LastIndexOf("00") <= 0, d => d.AreaCode.StartsWith(dto.AreaCode))
@@ -1521,14 +1523,14 @@ public class OrderApplication : IOrderApplication, IScopeDependency
                     d.SourceChannelCode == "SZMHD" && d.IsProvince == true) //政民互动
                     d.SourceChannelCode == "SZMHD" && d.IsProvince == true) //政民互动
                 .WhereIF(!string.IsNullOrEmpty(dto.ProvinceChannel) && dto.ProvinceChannel == "3", d => d.Source == ESource.ProvinceStraight &&
                 .WhereIF(!string.IsNullOrEmpty(dto.ProvinceChannel) && dto.ProvinceChannel == "3", d => d.Source == ESource.ProvinceStraight &&
                     d.SourceChannelCode == "S12345" && d.IsProvince == true) //省12345
                     d.SourceChannelCode == "S12345" && d.IsProvince == true) //省12345
-                                                                             //.WhereIF(!string.IsNullOrEmpty(dto.ContentRetrieval),d => d.Title.Contains(dto.ContentRetrieval) || d.Content.Contains(dto.ContentRetrieval) || d.FileOpinion.Contains(dto.ContentRetrieval) || d.ActualOpinion.Contains(dto.ContentRetrieval))
+                //.WhereIF(!string.IsNullOrEmpty(dto.ContentRetrieval),d => d.Title.Contains(dto.ContentRetrieval) || d.Content.Contains(dto.ContentRetrieval) || d.FileOpinion.Contains(dto.ContentRetrieval) || d.ActualOpinion.Contains(dto.ContentRetrieval))
                 .WhereIF(!string.IsNullOrEmpty(dto.ContentRetrieval), d => d.Content.Contains(dto.ContentRetrieval!))
                 .WhereIF(!string.IsNullOrEmpty(dto.ContentRetrieval), d => d.Content.Contains(dto.ContentRetrieval!))
                 .WhereIF(!string.IsNullOrEmpty(dto.FileOption), d => d.FileOpinion.Contains(dto.FileOption!))
                 .WhereIF(!string.IsNullOrEmpty(dto.FileOption), d => d.FileOpinion.Contains(dto.FileOption!))
                 .WhereIF(dto.IsSgin.HasValue && dto.IsSgin == true, d => d.CurrentStepAcceptTime != null)
                 .WhereIF(dto.IsSgin.HasValue && dto.IsSgin == true, d => d.CurrentStepAcceptTime != null)
                 .WhereIF(dto.IsSgin.HasValue && dto.IsSgin == false, d => d.CurrentStepAcceptTime == null)
                 .WhereIF(dto.IsSgin.HasValue && dto.IsSgin == false, d => d.CurrentStepAcceptTime == null)
                 .WhereIF(dto.FiledType is FiledType.CenterFiled, d => d.FileOrgIsCenter == true) //d => d.ProcessType == EProcessType.Zhiban
                 .WhereIF(dto.FiledType is FiledType.CenterFiled, d => d.FileOrgIsCenter == true) //d => d.ProcessType == EProcessType.Zhiban
                 .WhereIF(dto.FiledType is FiledType.OrgFiled, d => d.FileOrgIsCenter == false) //d => d.ProcessType == EProcessType.Jiaoban
                 .WhereIF(dto.FiledType is FiledType.OrgFiled, d => d.FileOrgIsCenter == false) //d => d.ProcessType == EProcessType.Jiaoban
-                                                                                               //.WhereIF(!string.IsNullOrEmpty(dto.OrderTagCode), d => d.OrderTagCode == dto.OrderTagCode)// 工单标签
+                //.WhereIF(!string.IsNullOrEmpty(dto.OrderTagCode), d => d.OrderTagCode == dto.OrderTagCode)// 工单标签
                 .WhereIF(!string.IsNullOrEmpty(dto.OrderTagCode), d => d.OrderTags.Any(ot => ot.DicDataValue == dto.OrderTagCode)) //工单标签
                 .WhereIF(!string.IsNullOrEmpty(dto.OrderTagCode), d => d.OrderTags.Any(ot => ot.DicDataValue == dto.OrderTagCode)) //工单标签
                 .WhereIF(!string.IsNullOrEmpty(dto.FocusOnEvents), d => SqlFunc.SplitIn(d.FocusOnEvents, dto.FocusOnEvents))
                 .WhereIF(!string.IsNullOrEmpty(dto.FocusOnEvents), d => SqlFunc.SplitIn(d.FocusOnEvents, dto.FocusOnEvents))
                 .OrderByIF(string.IsNullOrEmpty(dto.SortField), d => d.CreationTime, OrderByType.Desc) //默认排序时间为创建时间
                 .OrderByIF(string.IsNullOrEmpty(dto.SortField), d => d.CreationTime, OrderByType.Desc) //默认排序时间为创建时间
@@ -1816,7 +1818,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
             .Where(x => x.OrderSpecial.SpecialType == ESpecialType.ReTransact || x.OrderSpecial.SpecialType == ESpecialType.SendBack)
             .Where(x => x.OrderSpecial.SpecialType == ESpecialType.ReTransact || x.OrderSpecial.SpecialType == ESpecialType.SendBack)
             .Where(x => x.OrderSpecial.CreationTime >= dto.StartTime)
             .Where(x => x.OrderSpecial.CreationTime >= dto.StartTime)
             .Where(x => x.OrderSpecial.CreationTime <= dto.EndTime)
             .Where(x => x.OrderSpecial.CreationTime <= dto.EndTime)
-            .WhereIF(!_sessionContext.OrgIsCenter,x=>x.OrgId.StartsWith(_sessionContext.RequiredOrgId))
+            .WhereIF(!_sessionContext.OrgIsCenter, x => x.OrgId.StartsWith(_sessionContext.RequiredOrgId))
             .MergeTable()
             .MergeTable()
             .GroupBy(x => new { Time = x.OrderSpecial.CreationTime.ToString("yyyy-MM-dd"), x.OrgId, x.OrgName })
             .GroupBy(x => new { Time = x.OrderSpecial.CreationTime.ToString("yyyy-MM-dd"), x.OrgId, x.OrgName })
             .Select(x => new OrderReTransactVo
             .Select(x => new OrderReTransactVo
@@ -1942,9 +1944,9 @@ public class OrderApplication : IOrderApplication, IScopeDependency
         if (IsCenter && list != null)
         if (IsCenter && list != null)
         {
         {
             data = await list.GroupBy(x => new
             data = await list.GroupBy(x => new
-            {
-                VisitOrgCode = x.VisitOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6"))
-            })
+                {
+                    VisitOrgCode = x.VisitOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6"))
+                })
                 .Select(x => new VisitAndOrgSatisfactionStatisticsDto()
                 .Select(x => new VisitAndOrgSatisfactionStatisticsDto()
                 {
                 {
                     OrgCode = x.VisitOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6")),
                     OrgCode = x.VisitOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6")),
@@ -2001,9 +2003,9 @@ public class OrderApplication : IOrderApplication, IScopeDependency
         else
         else
         {
         {
             data = await list.GroupBy(x => new
             data = await list.GroupBy(x => new
-            {
-                VisitOrgCode = x.VisitOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>(orgLevelStr))
-            })
+                {
+                    VisitOrgCode = x.VisitOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>(orgLevelStr))
+                })
                 .Select(x => new VisitAndOrgSatisfactionStatisticsDto()
                 .Select(x => new VisitAndOrgSatisfactionStatisticsDto()
                 {
                 {
                     OrgCode = x.VisitOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>(orgLevelStr)),
                     OrgCode = x.VisitOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>(orgLevelStr)),
@@ -2070,20 +2072,20 @@ public class OrderApplication : IOrderApplication, IScopeDependency
             if (IsCenter)
             if (IsCenter)
             {
             {
                 oldData = await query.GroupBy((x, so) => new
                 oldData = await query.GroupBy((x, so) => new
-                {
-                    VisitOrgCode = so.Id.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6"))
-                }).Select((x, so) => new VisitAndOrgSatisfactionStatisticsDto()
-                {
-                    OrgCode = so.Id.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6")),
-                    TotalSumCount = SqlFunc.AggregateSum(x.Total),
-                    VerySatisfiedCount = SqlFunc.AggregateSum(x.VerySatisfaction), //非常满意数
-                    SatisfiedCount = SqlFunc.AggregateSum(x.Satisfaction), //满意数
-                    RegardedAsSatisfiedCount = SqlFunc.AggregateSum(x.TreatSatisfaction), //视为满意
-                    DefaultSatisfiedCount = SqlFunc.AggregateSum(x.DefaultSatisfaction), //默认满意
-                    NoSatisfiedCount = SqlFunc.AggregateSum(x.Dissatisfaction), //不满意
-                    NoEvaluateCount = SqlFunc.AggregateSum(x.NotEvaluated), //未做评价
-                    NoPutThroughCount = SqlFunc.AggregateSum(x.BlockCall), //未接通
-                })
+                    {
+                        VisitOrgCode = so.Id.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6"))
+                    }).Select((x, so) => new VisitAndOrgSatisfactionStatisticsDto()
+                    {
+                        OrgCode = so.Id.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6")),
+                        TotalSumCount = SqlFunc.AggregateSum(x.Total),
+                        VerySatisfiedCount = SqlFunc.AggregateSum(x.VerySatisfaction), //非常满意数
+                        SatisfiedCount = SqlFunc.AggregateSum(x.Satisfaction), //满意数
+                        RegardedAsSatisfiedCount = SqlFunc.AggregateSum(x.TreatSatisfaction), //视为满意
+                        DefaultSatisfiedCount = SqlFunc.AggregateSum(x.DefaultSatisfaction), //默认满意
+                        NoSatisfiedCount = SqlFunc.AggregateSum(x.Dissatisfaction), //不满意
+                        NoEvaluateCount = SqlFunc.AggregateSum(x.NotEvaluated), //未做评价
+                        NoPutThroughCount = SqlFunc.AggregateSum(x.BlockCall), //未接通
+                    })
                     .MergeTable()
                     .MergeTable()
                     .LeftJoin<SystemOrganize>((it, o) => it.OrgCode == o.Id)
                     .LeftJoin<SystemOrganize>((it, o) => it.OrgCode == o.Id)
                     .Select((it, o) => new VisitAndOrgSatisfactionStatisticsDto()
                     .Select((it, o) => new VisitAndOrgSatisfactionStatisticsDto()
@@ -2106,20 +2108,20 @@ public class OrderApplication : IOrderApplication, IScopeDependency
             else
             else
             {
             {
                 oldData = await query.GroupBy((x, so) => new
                 oldData = await query.GroupBy((x, so) => new
-                {
-                    VisitOrgCode = so.Id
-                }).Select((x, so) => new VisitAndOrgSatisfactionStatisticsDto()
-                {
-                    OrgCode = so.Id, //.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>(orgLevelStr)),
-                    TotalSumCount = SqlFunc.AggregateSum(x.Total),
-                    VerySatisfiedCount = SqlFunc.AggregateSum(x.VerySatisfaction), //非常满意数
-                    SatisfiedCount = SqlFunc.AggregateSum(x.Satisfaction), //满意数
-                    RegardedAsSatisfiedCount = SqlFunc.AggregateSum(x.TreatSatisfaction), //视为满意
-                    DefaultSatisfiedCount = SqlFunc.AggregateSum(x.DefaultSatisfaction), //默认满意
-                    NoSatisfiedCount = SqlFunc.AggregateSum(x.Dissatisfaction), //不满意
-                    NoEvaluateCount = SqlFunc.AggregateSum(x.NotEvaluated), //未做评价
-                    NoPutThroughCount = SqlFunc.AggregateSum(x.BlockCall), //未接通
-                })
+                    {
+                        VisitOrgCode = so.Id
+                    }).Select((x, so) => new VisitAndOrgSatisfactionStatisticsDto()
+                    {
+                        OrgCode = so.Id, //.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>(orgLevelStr)),
+                        TotalSumCount = SqlFunc.AggregateSum(x.Total),
+                        VerySatisfiedCount = SqlFunc.AggregateSum(x.VerySatisfaction), //非常满意数
+                        SatisfiedCount = SqlFunc.AggregateSum(x.Satisfaction), //满意数
+                        RegardedAsSatisfiedCount = SqlFunc.AggregateSum(x.TreatSatisfaction), //视为满意
+                        DefaultSatisfiedCount = SqlFunc.AggregateSum(x.DefaultSatisfaction), //默认满意
+                        NoSatisfiedCount = SqlFunc.AggregateSum(x.Dissatisfaction), //不满意
+                        NoEvaluateCount = SqlFunc.AggregateSum(x.NotEvaluated), //未做评价
+                        NoPutThroughCount = SqlFunc.AggregateSum(x.BlockCall), //未接通
+                    })
                     .MergeTable().LeftJoin<SystemOrganize>((it, o) => it.OrgCode == o.Id && (o.Level == orgLevel || o.Level == (orgLevel + 1)))
                     .MergeTable().LeftJoin<SystemOrganize>((it, o) => it.OrgCode == o.Id && (o.Level == orgLevel || o.Level == (orgLevel + 1)))
                     .Select((it, o) => new VisitAndOrgSatisfactionStatisticsDto()
                     .Select((it, o) => new VisitAndOrgSatisfactionStatisticsDto()
                     {
                     {
@@ -2139,22 +2141,22 @@ public class OrderApplication : IOrderApplication, IScopeDependency
             }
             }
 
 
             data = (from t1 in data
             data = (from t1 in data
-                    join t2 in oldData on t1.OrgCode equals t2.OrgCode into t1_t2
-                    from item in t1_t2.DefaultIfEmpty()
-                    select new VisitAndOrgSatisfactionStatisticsDto()
-                    {
-                        OrgName = t1.OrgName,
-                        OrgCode = t1.OrgCode,
-                        OrgType = t1.OrgType,
-                        TotalSumCount = t1.TotalSumCount + t1_t2.Select(x => x.TotalSumCount).FirstOrDefault(),
-                        VerySatisfiedCount = t1.VerySatisfiedCount + t1_t2.Select(x => x.VerySatisfiedCount).FirstOrDefault(), //非常满意数
-                        SatisfiedCount = t1.SatisfiedCount + t1_t2.Select(x => x.SatisfiedCount).FirstOrDefault(), //满意数
-                        RegardedAsSatisfiedCount = t1.RegardedAsSatisfiedCount + t1_t2.Select(x => x.RegardedAsSatisfiedCount).FirstOrDefault(), //视为满意
-                        DefaultSatisfiedCount = t1.DefaultSatisfiedCount + t1_t2.Select(x => x.DefaultSatisfiedCount).FirstOrDefault(), //默认满意
-                        NoSatisfiedCount = t1.NoSatisfiedCount + t1_t2.Select(x => x.NoSatisfiedCount).FirstOrDefault(), //不满意
-                        NoEvaluateCount = t1.NoEvaluateCount + t1_t2.Select(x => x.NoEvaluateCount).FirstOrDefault(), //未做评价
-                        NoPutThroughCount = t1.NoPutThroughCount + t1_t2.Select(x => x.NoPutThroughCount).FirstOrDefault(), //未接通
-                    }).ToList();
+                join t2 in oldData on t1.OrgCode equals t2.OrgCode into t1_t2
+                from item in t1_t2.DefaultIfEmpty()
+                select new VisitAndOrgSatisfactionStatisticsDto()
+                {
+                    OrgName = t1.OrgName,
+                    OrgCode = t1.OrgCode,
+                    OrgType = t1.OrgType,
+                    TotalSumCount = t1.TotalSumCount + t1_t2.Select(x => x.TotalSumCount).FirstOrDefault(),
+                    VerySatisfiedCount = t1.VerySatisfiedCount + t1_t2.Select(x => x.VerySatisfiedCount).FirstOrDefault(), //非常满意数
+                    SatisfiedCount = t1.SatisfiedCount + t1_t2.Select(x => x.SatisfiedCount).FirstOrDefault(), //满意数
+                    RegardedAsSatisfiedCount = t1.RegardedAsSatisfiedCount + t1_t2.Select(x => x.RegardedAsSatisfiedCount).FirstOrDefault(), //视为满意
+                    DefaultSatisfiedCount = t1.DefaultSatisfiedCount + t1_t2.Select(x => x.DefaultSatisfiedCount).FirstOrDefault(), //默认满意
+                    NoSatisfiedCount = t1.NoSatisfiedCount + t1_t2.Select(x => x.NoSatisfiedCount).FirstOrDefault(), //不满意
+                    NoEvaluateCount = t1.NoEvaluateCount + t1_t2.Select(x => x.NoEvaluateCount).FirstOrDefault(), //未做评价
+                    NoPutThroughCount = t1.NoPutThroughCount + t1_t2.Select(x => x.NoPutThroughCount).FirstOrDefault(), //未接通
+                }).ToList();
         }
         }
 
 
         #endregion
         #endregion
@@ -2267,20 +2269,20 @@ public class OrderApplication : IOrderApplication, IScopeDependency
                 .Where((x, so) => x.Time >= dto.StartTime.Value && x.Time <= dto.EndTime.Value);
                 .Where((x, so) => x.Time >= dto.StartTime.Value && x.Time <= dto.EndTime.Value);
 
 
             oldData = await query.GroupBy((x, so) => new
             oldData = await query.GroupBy((x, so) => new
-            {
-                VisitOrgCode = so.Id
-            }).Select((x, so) => new VisitAndOrgSatisfactionStatisticsDto()
-            {
-                OrgCode = so.Id, //.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>(orgLevelStr)),
-                TotalSumCount = SqlFunc.AggregateSum(x.Total),
-                VerySatisfiedCount = SqlFunc.AggregateSum(x.VerySatisfaction), //非常满意数
-                SatisfiedCount = SqlFunc.AggregateSum(x.Satisfaction), //满意数
-                RegardedAsSatisfiedCount = SqlFunc.AggregateSum(x.TreatSatisfaction), //视为满意
-                DefaultSatisfiedCount = SqlFunc.AggregateSum(x.DefaultSatisfaction), //默认满意
-                NoSatisfiedCount = SqlFunc.AggregateSum(x.Dissatisfaction), //不满意
-                NoEvaluateCount = SqlFunc.AggregateSum(x.NotEvaluated), //未做评价
-                NoPutThroughCount = SqlFunc.AggregateSum(x.BlockCall), //未接通
-            })
+                {
+                    VisitOrgCode = so.Id
+                }).Select((x, so) => new VisitAndOrgSatisfactionStatisticsDto()
+                {
+                    OrgCode = so.Id, //.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>(orgLevelStr)),
+                    TotalSumCount = SqlFunc.AggregateSum(x.Total),
+                    VerySatisfiedCount = SqlFunc.AggregateSum(x.VerySatisfaction), //非常满意数
+                    SatisfiedCount = SqlFunc.AggregateSum(x.Satisfaction), //满意数
+                    RegardedAsSatisfiedCount = SqlFunc.AggregateSum(x.TreatSatisfaction), //视为满意
+                    DefaultSatisfiedCount = SqlFunc.AggregateSum(x.DefaultSatisfaction), //默认满意
+                    NoSatisfiedCount = SqlFunc.AggregateSum(x.Dissatisfaction), //不满意
+                    NoEvaluateCount = SqlFunc.AggregateSum(x.NotEvaluated), //未做评价
+                    NoPutThroughCount = SqlFunc.AggregateSum(x.BlockCall), //未接通
+                })
                 .MergeTable().LeftJoin<SystemOrganize>((it, o) => it.OrgCode == o.Id && (o.Level == org.Level || o.Level == (org.Level + 1)))
                 .MergeTable().LeftJoin<SystemOrganize>((it, o) => it.OrgCode == o.Id && (o.Level == org.Level || o.Level == (org.Level + 1)))
                 .Select((it, o) => new VisitAndOrgSatisfactionStatisticsDto()
                 .Select((it, o) => new VisitAndOrgSatisfactionStatisticsDto()
                 {
                 {
@@ -2298,22 +2300,22 @@ public class OrderApplication : IOrderApplication, IScopeDependency
                 })
                 })
                 .ToListAsync();
                 .ToListAsync();
             mainList = (from t1 in mainList
             mainList = (from t1 in mainList
-                        join t2 in oldData on t1.OrgCode equals t2.OrgCode into t1_t2
-                        from item in t1_t2.DefaultIfEmpty()
-                        select new VisitAndOrgSatisfactionStatisticsDto()
-                        {
-                            OrgName = t1.OrgName,
-                            OrgCode = t1.OrgCode,
-                            OrgType = t1.OrgType,
-                            TotalSumCount = t1.TotalSumCount + t1_t2.Select(x => x.TotalSumCount).FirstOrDefault(),
-                            VerySatisfiedCount = t1.VerySatisfiedCount + t1_t2.Select(x => x.VerySatisfiedCount).FirstOrDefault(), //非常满意数
-                            SatisfiedCount = t1.SatisfiedCount + t1_t2.Select(x => x.SatisfiedCount).FirstOrDefault(), //满意数
-                            RegardedAsSatisfiedCount = t1.RegardedAsSatisfiedCount + t1_t2.Select(x => x.RegardedAsSatisfiedCount).FirstOrDefault(), //视为满意
-                            DefaultSatisfiedCount = t1.DefaultSatisfiedCount + t1_t2.Select(x => x.DefaultSatisfiedCount).FirstOrDefault(), //默认满意
-                            NoSatisfiedCount = t1.NoSatisfiedCount + t1_t2.Select(x => x.NoSatisfiedCount).FirstOrDefault(), //不满意
-                            NoEvaluateCount = t1.NoEvaluateCount + t1_t2.Select(x => x.NoEvaluateCount).FirstOrDefault(), //未做评价
-                            NoPutThroughCount = t1.NoPutThroughCount + t1_t2.Select(x => x.NoPutThroughCount).FirstOrDefault(), //未接通
-                        }).ToList();
+                join t2 in oldData on t1.OrgCode equals t2.OrgCode into t1_t2
+                from item in t1_t2.DefaultIfEmpty()
+                select new VisitAndOrgSatisfactionStatisticsDto()
+                {
+                    OrgName = t1.OrgName,
+                    OrgCode = t1.OrgCode,
+                    OrgType = t1.OrgType,
+                    TotalSumCount = t1.TotalSumCount + t1_t2.Select(x => x.TotalSumCount).FirstOrDefault(),
+                    VerySatisfiedCount = t1.VerySatisfiedCount + t1_t2.Select(x => x.VerySatisfiedCount).FirstOrDefault(), //非常满意数
+                    SatisfiedCount = t1.SatisfiedCount + t1_t2.Select(x => x.SatisfiedCount).FirstOrDefault(), //满意数
+                    RegardedAsSatisfiedCount = t1.RegardedAsSatisfiedCount + t1_t2.Select(x => x.RegardedAsSatisfiedCount).FirstOrDefault(), //视为满意
+                    DefaultSatisfiedCount = t1.DefaultSatisfiedCount + t1_t2.Select(x => x.DefaultSatisfiedCount).FirstOrDefault(), //默认满意
+                    NoSatisfiedCount = t1.NoSatisfiedCount + t1_t2.Select(x => x.NoSatisfiedCount).FirstOrDefault(), //不满意
+                    NoEvaluateCount = t1.NoEvaluateCount + t1_t2.Select(x => x.NoEvaluateCount).FirstOrDefault(), //未做评价
+                    NoPutThroughCount = t1.NoPutThroughCount + t1_t2.Select(x => x.NoPutThroughCount).FirstOrDefault(), //未接通
+                }).ToList();
         }
         }
 
 
         #endregion
         #endregion
@@ -2639,10 +2641,10 @@ public class OrderApplication : IOrderApplication, IScopeDependency
         if (IsCenter && list != null)
         if (IsCenter && list != null)
         {
         {
             data = await list.GroupBy((x, h) => new
             data = await list.GroupBy((x, h) => new
-            {
-                HotspotName = h.HotSpotName,
-                HotspotId = h.Id
-            })
+                {
+                    HotspotName = h.HotSpotName,
+                    HotspotId = h.Id
+                })
                 .Select((x, h) => new VisitAndHotspotSatisfactionStatisticsDto()
                 .Select((x, h) => new VisitAndHotspotSatisfactionStatisticsDto()
                 {
                 {
                     HotspotName = h.HotSpotName,
                     HotspotName = h.HotSpotName,
@@ -2677,10 +2679,10 @@ public class OrderApplication : IOrderApplication, IScopeDependency
         else
         else
         {
         {
             data = await list.GroupBy((x, h) => new
             data = await list.GroupBy((x, h) => new
-            {
-                HotspotName = h.HotSpotName,
-                HotspotId = h.Id
-            })
+                {
+                    HotspotName = h.HotSpotName,
+                    HotspotId = h.Id
+                })
                 .Select((x, h) => new VisitAndHotspotSatisfactionStatisticsDto()
                 .Select((x, h) => new VisitAndHotspotSatisfactionStatisticsDto()
                 {
                 {
                     HotspotName = h.HotSpotName,
                     HotspotName = h.HotSpotName,
@@ -2742,21 +2744,21 @@ public class OrderApplication : IOrderApplication, IScopeDependency
                 .ToListAsync();
                 .ToListAsync();
 
 
             data = (from t1 in data
             data = (from t1 in data
-                    join t2 in oldList on t1.HotspotId equals t2.HotspotId into t1_t2
-                    from item in t1_t2.DefaultIfEmpty()
-                    select new VisitAndHotspotSatisfactionStatisticsDto()
-                    {
-                        HotspotName = t1.HotspotName,
-                        HotspotId = t1.HotspotId,
-                        TotalSumCount = t1.TotalSumCount + t1_t2.Select(x => x.TotalSumCount).FirstOrDefault(),
-                        VerySatisfiedCount = t1.VerySatisfiedCount + t1_t2.Select(x => x.VerySatisfiedCount).FirstOrDefault(), //非常满意数
-                        SatisfiedCount = t1.SatisfiedCount + t1_t2.Select(x => x.SatisfiedCount).FirstOrDefault(), //满意数
-                        RegardedAsSatisfiedCount = t1.RegardedAsSatisfiedCount + t1_t2.Select(x => x.RegardedAsSatisfiedCount).FirstOrDefault(), //视为满意
-                        DefaultSatisfiedCount = t1.DefaultSatisfiedCount + t1_t2.Select(x => x.DefaultSatisfiedCount).FirstOrDefault(), //默认满意
-                        NoSatisfiedCount = t1.NoSatisfiedCount + t1_t2.Select(x => x.NoSatisfiedCount).FirstOrDefault(), //不满意
-                        NoEvaluateCount = t1.NoEvaluateCount + t1_t2.Select(x => x.NoEvaluateCount).FirstOrDefault(), //未做评价
-                        NoPutThroughCount = t1.NoPutThroughCount + t1_t2.Select(x => x.NoPutThroughCount).FirstOrDefault(), //未接通
-                    }).ToList();
+                join t2 in oldList on t1.HotspotId equals t2.HotspotId into t1_t2
+                from item in t1_t2.DefaultIfEmpty()
+                select new VisitAndHotspotSatisfactionStatisticsDto()
+                {
+                    HotspotName = t1.HotspotName,
+                    HotspotId = t1.HotspotId,
+                    TotalSumCount = t1.TotalSumCount + t1_t2.Select(x => x.TotalSumCount).FirstOrDefault(),
+                    VerySatisfiedCount = t1.VerySatisfiedCount + t1_t2.Select(x => x.VerySatisfiedCount).FirstOrDefault(), //非常满意数
+                    SatisfiedCount = t1.SatisfiedCount + t1_t2.Select(x => x.SatisfiedCount).FirstOrDefault(), //满意数
+                    RegardedAsSatisfiedCount = t1.RegardedAsSatisfiedCount + t1_t2.Select(x => x.RegardedAsSatisfiedCount).FirstOrDefault(), //视为满意
+                    DefaultSatisfiedCount = t1.DefaultSatisfiedCount + t1_t2.Select(x => x.DefaultSatisfiedCount).FirstOrDefault(), //默认满意
+                    NoSatisfiedCount = t1.NoSatisfiedCount + t1_t2.Select(x => x.NoSatisfiedCount).FirstOrDefault(), //不满意
+                    NoEvaluateCount = t1.NoEvaluateCount + t1_t2.Select(x => x.NoEvaluateCount).FirstOrDefault(), //未做评价
+                    NoPutThroughCount = t1.NoPutThroughCount + t1_t2.Select(x => x.NoPutThroughCount).FirstOrDefault(), //未接通
+                }).ToList();
         }
         }
 
 
         return data;
         return data;
@@ -3201,7 +3203,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
             .Includes(x => x.OrderScreens)
             .Includes(x => x.OrderScreens)
             .Where(x => x.OrderScreens.Any(s => s.Status == EScreenStatus.SendBack && s.ScreenType == dto.ScreenType && s.SendBackApply == true) ||
             .Where(x => x.OrderScreens.Any(s => s.Status == EScreenStatus.SendBack && s.ScreenType == dto.ScreenType && s.SendBackApply == true) ||
                         x.OrderScreens.Any() == false
                         x.OrderScreens.Any() == false
-            //|| x.OrderScreens.Any(s => (s.Status != EScreenStatus.SendBack && s.SendBackApply != true)) == false
+                //|| x.OrderScreens.Any(s => (s.Status != EScreenStatus.SendBack && s.SendBackApply != true)) == false
             )
             )
             .Where(x => x.OrderVisit.Order.ReceiveProvinceNo.StartsWith("ZGZFW") == false ||
             .Where(x => x.OrderVisit.Order.ReceiveProvinceNo.StartsWith("ZGZFW") == false ||
                         string.IsNullOrEmpty(x.OrderVisit.Order.ReceiveProvinceNo))
                         string.IsNullOrEmpty(x.OrderVisit.Order.ReceiveProvinceNo))
@@ -3434,11 +3436,13 @@ public class OrderApplication : IOrderApplication, IScopeDependency
             .WhereIF(dto.IdentityType != null, d => d.Order.IdentityType == dto.IdentityType) //来电主体
             .WhereIF(dto.IdentityType != null, d => d.Order.IdentityType == dto.IdentityType) //来电主体
             .WhereIF(dto.CreationTimeStart.HasValue, d => d.Order.CreationTime >= dto.CreationTimeStart)
             .WhereIF(dto.CreationTimeStart.HasValue, d => d.Order.CreationTime >= dto.CreationTimeStart)
             .WhereIF(dto.CreationTimeEnd.HasValue, d => d.Order.CreationTime <= dto.CreationTimeEnd)
             .WhereIF(dto.CreationTimeEnd.HasValue, d => d.Order.CreationTime <= dto.CreationTimeEnd)
-            .WhereIF(dto.AiVisitResult.HasValue && dto.AiVisitResult == EAiVisitResult.OrgProcessingResultsNoSatisfied, d => d.VisitState == EVisitState.WaitForVisit && d.VisitType == EVisitType.ChipVoiceVisit && d.OrderVisitDetails.Any(m => SqlFunc.JsonField(m.OrgProcessingResults, "Key") == "2"))
+            .WhereIF(dto.AiVisitResult.HasValue && dto.AiVisitResult == EAiVisitResult.OrgProcessingResultsNoSatisfied,
+                d => d.VisitState == EVisitState.WaitForVisit && d.VisitType == EVisitType.ChipVoiceVisit &&
+                     d.OrderVisitDetails.Any(m => SqlFunc.JsonField(m.OrgProcessingResults, "Key") == "2"))
             //.WhereIF(dto.IsAiVisit.HasValue && dto.IsAiVisit == false, x => x.AiVisitCount > 0)   //是否建立智能回访任务 取反(建立过)
             //.WhereIF(dto.IsAiVisit.HasValue && dto.IsAiVisit == false, x => x.AiVisitCount > 0)   //是否建立智能回访任务 取反(建立过)
-            .WhereIF(dto.IsAiVisit.HasValue && dto.IsAiVisit == true, x => x.AiVisitCount <= 0)   //(未建立过)
+            .WhereIF(dto.IsAiVisit.HasValue && dto.IsAiVisit == true, x => x.AiVisitCount <= 0) //(未建立过)
             .WhereIF(!string.IsNullOrEmpty(dto.Channel), d => d.Order.SourceChannelCode == dto.Channel)
             .WhereIF(!string.IsNullOrEmpty(dto.Channel), d => d.Order.SourceChannelCode == dto.Channel)
-            .OrderByIF(dto.VisitStateQuery!= EVisitStateQuery.Visited,x=> x.Order.IsUrgent, OrderByType.Desc)
+            .OrderByIF(dto.VisitStateQuery != EVisitStateQuery.Visited, x => x.Order.IsUrgent, OrderByType.Desc)
             .OrderByDescending(d => d.PublishTime);
             .OrderByDescending(d => d.PublishTime);
         return query;
         return query;
     }
     }
@@ -3768,7 +3772,8 @@ public class OrderApplication : IOrderApplication, IScopeDependency
     /// <summary>
     /// <summary>
     /// 查询特提操作目标节点的指派对象
     /// 查询特提操作目标节点的指派对象
     /// </summary>
     /// </summary>
-    public async Task<StepAssignInfo?> GetOrderRecallAssignInfoAsync(Workflow workflow, StepDefine targetStepDefine, WorkflowStep currentStep,
+    public async Task<StepAssignInfo?> GetOrderRecallAssignInfoAsync(
+        Workflow workflow, StepDefine targetStepDefine, WorkflowStep targetStep,
         BasicWorkflowDto dto, CancellationToken cancellationToken)
         BasicWorkflowDto dto, CancellationToken cancellationToken)
     {
     {
         //自贡需求:
         //自贡需求:
@@ -3819,21 +3824,34 @@ public class OrderApplication : IOrderApplication, IScopeDependency
                         rsp = new StepAssignInfo
                         rsp = new StepAssignInfo
                         {
                         {
                             FlowAssignType = EFlowAssignType.Org,
                             FlowAssignType = EFlowAssignType.Org,
-                            OrgId = currentStep.HandlerOrgId,
-                            OrgName = currentStep.HandlerOrgName,
-                            Key = currentStep.HandlerOrgId,
-                            Value = currentStep.HandlerOrgName,
+                            OrgId = targetStep.HandlerOrgId,
+                            OrgName = targetStep.HandlerOrgName,
+                            Key = targetStep.HandlerOrgId,
+                            Value = targetStep.HandlerOrgName,
                         };
                         };
                         break;
                         break;
                     case EBusinessType.DepartmentLeader:
                     case EBusinessType.DepartmentLeader:
-                        rsp = new StepAssignInfo
+                        if (targetStep.FlowAssignType is EFlowAssignType.OrgAndRole &&
+                            !string.IsNullOrEmpty(targetStep.HandlerOrgId) &&
+                            !string.IsNullOrEmpty(targetStep.RoleId))
                         {
                         {
-                            FlowAssignType = EFlowAssignType.OrgAndRole,
-                            OrgId = currentStep.HandlerOrgId,
-                            OrgName = currentStep.HandlerOrgName,
-                            Key = currentStep.HandlerOrgId,
-                            Value = currentStep.HandlerOrgName,
-                        };
+                            rsp = targetStep.GetWorkflowStepHandler();
+                        }
+                        else
+                        {
+                            var define = targetStepDefine.HandlerTypeItems.First();
+                            rsp = new StepAssignInfo
+                            {
+                                FlowAssignType = EFlowAssignType.OrgAndRole,
+                                OrgId = targetStep.HandlerOrgId,
+                                OrgName = targetStep.HandlerOrgName,
+                                RoleId = define.Key,
+                                RoleName = define.Value,
+                                Key = targetStep.HandlerOrgId,
+                                Value = targetStep.HandlerOrgName,
+                            };
+                        }
+
                         break;
                         break;
                     case EBusinessType.File:
                     case EBusinessType.File:
                     case EBusinessType.Unknown:
                     case EBusinessType.Unknown:
@@ -3871,21 +3889,33 @@ public class OrderApplication : IOrderApplication, IScopeDependency
                         rsp = new StepAssignInfo
                         rsp = new StepAssignInfo
                         {
                         {
                             FlowAssignType = EFlowAssignType.Org,
                             FlowAssignType = EFlowAssignType.Org,
-                            OrgId = currentStep.HandlerOrgId,
-                            OrgName = currentStep.HandlerOrgName,
-                            Key = currentStep.HandlerOrgId,
-                            Value = currentStep.HandlerOrgName,
+                            OrgId = targetStep.HandlerOrgId,
+                            OrgName = targetStep.HandlerOrgName,
+                            Key = targetStep.HandlerOrgId,
+                            Value = targetStep.HandlerOrgName,
                         };
                         };
                         break;
                         break;
                     case EBusinessType.DepartmentLeader:
                     case EBusinessType.DepartmentLeader:
-                        rsp = new StepAssignInfo
+                        if (targetStep.FlowAssignType is EFlowAssignType.OrgAndRole &&
+                            !string.IsNullOrEmpty(targetStep.HandlerOrgId) &&
+                            !string.IsNullOrEmpty(targetStep.RoleId))
                         {
                         {
-                            FlowAssignType = EFlowAssignType.OrgAndRole,
-                            OrgId = currentStep.HandlerOrgId,
-                            OrgName = currentStep.HandlerOrgName,
-                            Key = currentStep.HandlerOrgId,
-                            Value = currentStep.HandlerOrgName,
-                        };
+                            rsp = targetStep.GetWorkflowStepHandler();
+                        }
+                        else
+                        {
+                            define = targetStepDefine.HandlerTypeItems.First();
+                            rsp = new StepAssignInfo
+                            {
+                                FlowAssignType = EFlowAssignType.OrgAndRole,
+                                OrgId = targetStep.HandlerOrgId,
+                                OrgName = targetStep.HandlerOrgName,
+                                RoleId = define.Key,
+                                RoleName = define.Value,
+                                Key = targetStep.HandlerOrgId,
+                                Value = targetStep.HandlerOrgName,
+                            };
+                        }
                         break;
                         break;
                     case EBusinessType.File:
                     case EBusinessType.File:
                     case EBusinessType.Unknown:
                     case EBusinessType.Unknown:
@@ -3907,31 +3937,43 @@ public class OrderApplication : IOrderApplication, IScopeDependency
                         rsp = new StepAssignInfo
                         rsp = new StepAssignInfo
                         {
                         {
                             FlowAssignType = EFlowAssignType.User,
                             FlowAssignType = EFlowAssignType.User,
-                            UserId = currentStep.HandlerId,
-                            Username = currentStep.HandlerName,
-                            Key = currentStep.HandlerId,
-                            Value = currentStep.HandlerName,
+                            UserId = targetStep.HandlerId,
+                            Username = targetStep.HandlerName,
+                            Key = targetStep.HandlerId,
+                            Value = targetStep.HandlerName,
                         };
                         };
                         break;
                         break;
                     case EBusinessType.Department:
                     case EBusinessType.Department:
                         rsp = new StepAssignInfo
                         rsp = new StepAssignInfo
                         {
                         {
                             FlowAssignType = EFlowAssignType.Org,
                             FlowAssignType = EFlowAssignType.Org,
-                            OrgId = currentStep.HandlerOrgId,
-                            OrgName = currentStep.HandlerOrgName,
-                            Key = currentStep.HandlerOrgId,
-                            Value = currentStep.HandlerOrgName,
+                            OrgId = targetStep.HandlerOrgId,
+                            OrgName = targetStep.HandlerOrgName,
+                            Key = targetStep.HandlerOrgId,
+                            Value = targetStep.HandlerOrgName,
                         };
                         };
                         break;
                         break;
                     case EBusinessType.DepartmentLeader:
                     case EBusinessType.DepartmentLeader:
-                        rsp = new StepAssignInfo
+                        if (targetStep.FlowAssignType is EFlowAssignType.OrgAndRole &&
+                            !string.IsNullOrEmpty(targetStep.HandlerOrgId) &&
+                            !string.IsNullOrEmpty(targetStep.RoleId))
                         {
                         {
-                            FlowAssignType = EFlowAssignType.OrgAndRole,
-                            OrgId = currentStep.HandlerOrgId,
-                            OrgName = currentStep.HandlerOrgName,
-                            Key = currentStep.HandlerOrgId,
-                            Value = currentStep.HandlerOrgName,
-                        };
+                            rsp = targetStep.GetWorkflowStepHandler();
+                        }
+                        else
+                        {
+                            var define = targetStepDefine.HandlerTypeItems.First();
+                            rsp = new StepAssignInfo
+                            {
+                                FlowAssignType = EFlowAssignType.OrgAndRole,
+                                OrgId = targetStep.HandlerOrgId,
+                                OrgName = targetStep.HandlerOrgName,
+                                RoleId = define.Key,
+                                RoleName = define.Value,
+                                Key = targetStep.HandlerOrgId,
+                                Value = targetStep.HandlerOrgName,
+                            };
+                        }
                         break;
                         break;
                     case EBusinessType.File:
                     case EBusinessType.File:
                     case EBusinessType.Unknown:
                     case EBusinessType.Unknown:
@@ -4253,20 +4295,20 @@ public class OrderApplication : IOrderApplication, IScopeDependency
             }).ToListAsync();
             }).ToListAsync();
 
 
         var res = (from t1 in items
         var res = (from t1 in items
-                   join t2 in items2 on t1.UserId equals t2.UserId into t1_t2
-                   from item in t1_t2.DefaultIfEmpty()
-                   select new SendOrderReportOutDto
-                   {
-                       UserId = t1.UserId,
-                       UserName = t1.UserName,
-                       SendOrderNum = t1.SendOrderNum,
-                       NoSendOrderNum = t1.NoSendOrderNum,
-                       ReSendOrderNum = t1_t2.Select(x => x.ReSendOrderNum).FirstOrDefault(),
-                       ChainRate = t1_t2.Select(x => x.ReSendOrderNum).FirstOrDefault() > 0
-                           ? ((double.Parse(t1.SendOrderNum.ToString()) - double.Parse(t1_t2.Select(x => x.ReSendOrderNum).FirstOrDefault().ToString())) /
-                               double.Parse(t1.SendOrderNum.ToString()) * 100).ToString("F2") + "%"
-                           : "100.00%",
-                   }).ToList();
+            join t2 in items2 on t1.UserId equals t2.UserId into t1_t2
+            from item in t1_t2.DefaultIfEmpty()
+            select new SendOrderReportOutDto
+            {
+                UserId = t1.UserId,
+                UserName = t1.UserName,
+                SendOrderNum = t1.SendOrderNum,
+                NoSendOrderNum = t1.NoSendOrderNum,
+                ReSendOrderNum = t1_t2.Select(x => x.ReSendOrderNum).FirstOrDefault(),
+                ChainRate = t1_t2.Select(x => x.ReSendOrderNum).FirstOrDefault() > 0
+                    ? ((double.Parse(t1.SendOrderNum.ToString()) - double.Parse(t1_t2.Select(x => x.ReSendOrderNum).FirstOrDefault().ToString())) /
+                        double.Parse(t1.SendOrderNum.ToString()) * 100).ToString("F2") + "%"
+                    : "100.00%",
+            }).ToList();
         return res;
         return res;
     }
     }
 
 
@@ -4419,7 +4461,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
                     )
                     )
                     .Where(d => d.Status <= EOrderStatus.HandOverToUnAccept
                     .Where(d => d.Status <= EOrderStatus.HandOverToUnAccept
                                 || d.Status == EOrderStatus.Handling //指派给班长再指派回坐席时
                                 || d.Status == EOrderStatus.Handling //指派给班长再指派回坐席时
-                                                                     //|| d.Status == EOrderStatus.Countersigning//跨级派单业务如发起会签再回到坐席会签汇总时
+                        //|| d.Status == EOrderStatus.Countersigning//跨级派单业务如发起会签再回到坐席会签汇总时
                     )
                     )
                     ;
                     ;
 
 
@@ -4608,7 +4650,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
             .WhereIF(dto.IsUrgent.HasValue, d => d.IsUrgent == dto.IsUrgent!.Value)
             .WhereIF(dto.IsUrgent.HasValue, d => d.IsUrgent == dto.IsUrgent!.Value)
             .WhereIF(dto.Status.HasValue, d => d.Status == dto.Status) //工单状态
             .WhereIF(dto.Status.HasValue, d => d.Status == dto.Status) //工单状态
             .WhereIF(!string.IsNullOrEmpty(dto.CurrentStepCode), d => d.CurrentStepCode == dto.CurrentStepCode) //当前办理节点
             .WhereIF(!string.IsNullOrEmpty(dto.CurrentStepCode), d => d.CurrentStepCode == dto.CurrentStepCode) //当前办理节点
-                                                                                                                //.OrderByDescending(d => d.IsUrgent)
+            //.OrderByDescending(d => d.IsUrgent)
             .OrderByIF(string.IsNullOrEmpty(dto.SortField), d => d.IsUrgent, OrderByType.Desc)
             .OrderByIF(string.IsNullOrEmpty(dto.SortField), d => d.IsUrgent, OrderByType.Desc)
             .OrderByIF(string.IsNullOrEmpty(dto.SortField), d => d.StartTime, OrderByType.Desc)
             .OrderByIF(string.IsNullOrEmpty(dto.SortField), d => d.StartTime, OrderByType.Desc)
             .OrderByIF(dto is { SortField: "creationTime", SortRule: 0 }, d => d.CreationTime, OrderByType.Asc) //创建时间升序
             .OrderByIF(dto is { SortField: "creationTime", SortRule: 0 }, d => d.CreationTime, OrderByType.Asc) //创建时间升序

+ 6 - 6
src/Hotline/FlowEngine/Workflows/IWorkflowDomainService.cs

@@ -99,20 +99,20 @@ namespace Hotline.FlowEngine.Workflows
         Task<(Workflow, StepDefine, WorkflowStep, WorkflowStep, WorkflowStep, bool)> RecallAsync(
         Task<(Workflow, StepDefine, WorkflowStep, WorkflowStep, WorkflowStep, bool)> RecallAsync(
             RecallDto dto, StepAssignInfo stepAssignInfo,
             RecallDto dto, StepAssignInfo stepAssignInfo,
             EWorkflowTraceType traceType, DateTime? expiredTime, bool isOrderFiled, EHandleMode handleMode,
             EWorkflowTraceType traceType, DateTime? expiredTime, bool isOrderFiled, EHandleMode handleMode,
-            Action<Workflow, WorkflowStep, StepDefine, WorkflowStep>? stepConfig = null,
+            Action<Workflow, WorkflowStep, StepDefine, WorkflowStep, WorkflowStep>? stepConfig = null,
             CancellationToken cancellationToken = default);
             CancellationToken cancellationToken = default);
 
 
         Task<(Workflow, StepDefine, WorkflowStep, WorkflowStep, WorkflowStep, bool)> RecallAsync(
         Task<(Workflow, StepDefine, WorkflowStep, WorkflowStep, WorkflowStep, bool)> RecallAsync(
             Workflow workflow, BasicWorkflowDto dto, StepAssignInfo stepAssignInfo,
             Workflow workflow, BasicWorkflowDto dto, StepAssignInfo stepAssignInfo,
             StepDefine targetStepDefine, EWorkflowTraceType traceType, DateTime? expiredTime, bool isOrderFiled, EHandleMode handleMode,
             StepDefine targetStepDefine, EWorkflowTraceType traceType, DateTime? expiredTime, bool isOrderFiled, EHandleMode handleMode,
-            Action<Workflow, WorkflowStep, StepDefine, WorkflowStep>? stepConfig = null,
+            Action<Workflow, WorkflowStep, StepDefine, WorkflowStep, WorkflowStep>? stepConfig = null,
             CancellationToken cancellationToken = default);
             CancellationToken cancellationToken = default);
 
 
         Task<(Workflow, StepDefine, WorkflowStep, WorkflowStep, WorkflowStep, bool)> RecallAsync(
         Task<(Workflow, StepDefine, WorkflowStep, WorkflowStep, WorkflowStep, bool)> RecallAsync(
             Workflow workflow, BasicWorkflowDto dto, StepAssignInfo stepAssignInfo,
             Workflow workflow, BasicWorkflowDto dto, StepAssignInfo stepAssignInfo,
             WorkflowStep targetStep, EWorkflowTraceType traceType,
             WorkflowStep targetStep, EWorkflowTraceType traceType,
             DateTime? expiredTime, bool isOrderFiled, EHandleMode handleMode,
             DateTime? expiredTime, bool isOrderFiled, EHandleMode handleMode,
-            Action<Workflow, WorkflowStep, StepDefine, WorkflowStep>? stepConfig = null,
+            Action<Workflow, WorkflowStep, StepDefine, WorkflowStep, WorkflowStep>? stepConfig = null,
             CancellationToken cancellationToken = default);
             CancellationToken cancellationToken = default);
 
 
         // Task<bool> RecallAsync(Workflow workflow, BasicWorkflowDto dto, StepAssignInfo stepAssignInfo,
         // Task<bool> RecallAsync(Workflow workflow, BasicWorkflowDto dto, StepAssignInfo stepAssignInfo,
@@ -125,14 +125,14 @@ namespace Hotline.FlowEngine.Workflows
         /// 撤回至开始节点
         /// 撤回至开始节点
         /// </summary>
         /// </summary>
         Task RecallToStartStepAsync(Workflow workflow, string opinion, DateTime? expiredTime, bool isOrderFiled, EHandleMode handleMode,
         Task RecallToStartStepAsync(Workflow workflow, string opinion, DateTime? expiredTime, bool isOrderFiled, EHandleMode handleMode,
-            Action<Workflow, WorkflowStep, StepDefine, WorkflowStep>? stepConfig = null,
+            Action<Workflow, WorkflowStep, StepDefine, WorkflowStep, WorkflowStep>? stepConfig = null,
             CancellationToken cancellationToken = default);
             CancellationToken cancellationToken = default);
 
 
         /// <summary>
         /// <summary>
         /// 特提至派单节点(无派单节点会抛异常)
         /// 特提至派单节点(无派单节点会抛异常)
         /// </summary>
         /// </summary>
         Task RecallToSendStepAsync(Workflow workflow, string opinion, DateTime? expiredTime, bool isOrderFiled, EHandleMode handleMode,
         Task RecallToSendStepAsync(Workflow workflow, string opinion, DateTime? expiredTime, bool isOrderFiled, EHandleMode handleMode,
-            Action<Workflow, WorkflowStep, StepDefine, WorkflowStep>? stepConfig = null,
+            Action<Workflow, WorkflowStep, StepDefine, WorkflowStep, WorkflowStep>? stepConfig = null,
             CancellationToken cancellationToken = default);
             CancellationToken cancellationToken = default);
 
 
         /// <summary>
         /// <summary>
@@ -141,7 +141,7 @@ namespace Hotline.FlowEngine.Workflows
         /// <returns></returns>
         /// <returns></returns>
         Task<(bool, Workflow workflow)> RecallToCenterFirstToSendAsync(string workflowId, string opinion,
         Task<(bool, Workflow workflow)> RecallToCenterFirstToSendAsync(string workflowId, string opinion,
             bool isOrderFiled, DateTime? expiredTime, EHandleMode handleMode,
             bool isOrderFiled, DateTime? expiredTime, EHandleMode handleMode,
-            Action<Workflow, WorkflowStep, StepDefine, WorkflowStep>? stepConfig = null,
+            Action<Workflow, WorkflowStep, StepDefine, WorkflowStep, WorkflowStep>? stepConfig = null,
             CancellationToken cancellationToken = default);
             CancellationToken cancellationToken = default);
 
 
         ///// <summary>
         ///// <summary>

+ 33 - 13
src/Hotline/FlowEngine/Workflows/WorkflowDomainService.cs

@@ -1528,7 +1528,7 @@ namespace Hotline.FlowEngine.Workflows
         public async Task<(Workflow, StepDefine, WorkflowStep, WorkflowStep, WorkflowStep, bool)> RecallAsync(
         public async Task<(Workflow, StepDefine, WorkflowStep, WorkflowStep, WorkflowStep, bool)> RecallAsync(
             RecallDto dto, StepAssignInfo stepAssignInfo,
             RecallDto dto, StepAssignInfo stepAssignInfo,
             EWorkflowTraceType traceType, DateTime? expiredTime, bool isOrderFiled, EHandleMode handleMode,
             EWorkflowTraceType traceType, DateTime? expiredTime, bool isOrderFiled, EHandleMode handleMode,
-            Action<Workflow, WorkflowStep, StepDefine, WorkflowStep>? stepConfig = null,
+            Action<Workflow, WorkflowStep, StepDefine, WorkflowStep, WorkflowStep>? stepConfig = null,
             CancellationToken cancellationToken = default)
             CancellationToken cancellationToken = default)
         {
         {
             var workflow = await GetWorkflowAsync(dto.WorkflowId, withDefine: true, withSteps: true,
             var workflow = await GetWorkflowAsync(dto.WorkflowId, withDefine: true, withSteps: true,
@@ -1552,7 +1552,7 @@ namespace Hotline.FlowEngine.Workflows
         public Task<(Workflow, StepDefine, WorkflowStep, WorkflowStep, WorkflowStep, bool)> RecallAsync(
         public Task<(Workflow, StepDefine, WorkflowStep, WorkflowStep, WorkflowStep, bool)> RecallAsync(
             Workflow workflow, BasicWorkflowDto dto, StepAssignInfo stepAssignInfo,
             Workflow workflow, BasicWorkflowDto dto, StepAssignInfo stepAssignInfo,
             StepDefine targetStepDefine, EWorkflowTraceType traceType, DateTime? expiredTime, bool isOrderFiled, EHandleMode handleMode,
             StepDefine targetStepDefine, EWorkflowTraceType traceType, DateTime? expiredTime, bool isOrderFiled, EHandleMode handleMode,
-            Action<Workflow, WorkflowStep, StepDefine, WorkflowStep>? stepConfig = null,
+            Action<Workflow, WorkflowStep, StepDefine, WorkflowStep, WorkflowStep>? stepConfig = null,
             CancellationToken cancellationToken = default)
             CancellationToken cancellationToken = default)
         {
         {
             var targetStep = workflow.Steps.FirstOrDefault(d => d.Code == dto.NextStepCode && d.IsOrigin);
             var targetStep = workflow.Steps.FirstOrDefault(d => d.Code == dto.NextStepCode && d.IsOrigin);
@@ -1567,7 +1567,7 @@ namespace Hotline.FlowEngine.Workflows
         public Task<(Workflow, StepDefine, WorkflowStep, WorkflowStep, WorkflowStep, bool)> RecallAsync(
         public Task<(Workflow, StepDefine, WorkflowStep, WorkflowStep, WorkflowStep, bool)> RecallAsync(
             Workflow workflow, BasicWorkflowDto dto, StepAssignInfo stepAssignInfo,
             Workflow workflow, BasicWorkflowDto dto, StepAssignInfo stepAssignInfo,
             WorkflowStep targetStep, EWorkflowTraceType traceType, DateTime? expiredTime, bool isOrderFiled, EHandleMode handleMode,
             WorkflowStep targetStep, EWorkflowTraceType traceType, DateTime? expiredTime, bool isOrderFiled, EHandleMode handleMode,
-            Action<Workflow, WorkflowStep, StepDefine, WorkflowStep>? stepConfig = null,
+            Action<Workflow, WorkflowStep, StepDefine, WorkflowStep, WorkflowStep>? stepConfig = null,
             CancellationToken cancellationToken = default)
             CancellationToken cancellationToken = default)
         {
         {
             var targetStepDefine = GetStepDefine(workflow.WorkflowDefinition, dto.NextStepCode);
             var targetStepDefine = GetStepDefine(workflow.WorkflowDefinition, dto.NextStepCode);
@@ -1588,7 +1588,7 @@ namespace Hotline.FlowEngine.Workflows
             Workflow workflow, BasicWorkflowDto dto, StepAssignInfo stepAssignInfo,
             Workflow workflow, BasicWorkflowDto dto, StepAssignInfo stepAssignInfo,
             StepDefine targetStepDefine, WorkflowStep targetStep, EWorkflowTraceType traceType,
             StepDefine targetStepDefine, WorkflowStep targetStep, EWorkflowTraceType traceType,
             DateTime? expiredTime, bool isOrderFiled, EHandleMode handleMode,
             DateTime? expiredTime, bool isOrderFiled, EHandleMode handleMode,
-            Action<Workflow, WorkflowStep, StepDefine, WorkflowStep>? stepConfig = null,
+            Action<Workflow, WorkflowStep, StepDefine, WorkflowStep, WorkflowStep>? stepConfig = null,
             CancellationToken cancellationToken = default)
             CancellationToken cancellationToken = default)
         {
         {
             var targetIsStartStep = targetStepDefine.StepType is EStepType.Start;
             var targetIsStartStep = targetStepDefine.StepType is EStepType.Start;
@@ -1696,12 +1696,32 @@ namespace Hotline.FlowEngine.Workflows
 
 
             //var stepAssignInfo = GetStepAssignInfo(reverseFlowStepAssignInfo, targetStep, targetStepDefine);
             //var stepAssignInfo = GetStepAssignInfo(reverseFlowStepAssignInfo, targetStep, targetStepDefine);
             stepAssignInfo ??= targetStep.GetWorkflowStepHandler();
             stepAssignInfo ??= targetStep.GetWorkflowStepHandler();
-            var targetStepNew = targetIsStartStep
-                ? await CreateStartStepAsync(workflow, targetStepDefine, dto, assigner,
-                    stepAssignInfo, traceType, expiredTime, stepConfig, cancellationToken)
-                : (await CreateStepsAsync(workflow, targetStepDefine, targetPrevStep, dto, assigner, [stepAssignInfo],
-                    null, EWorkflowStepStatus.WaitForAccept, ECountersignPosition.None, true, traceType,
-                    null, expiredTime, stepConfig: stepConfig, cancellationToken: cancellationToken)).First();
+            WorkflowStep targetStepNew;
+            if (targetIsStartStep)
+            {
+                // targetStepNew = await CreateStartStepAsync(workflow, targetStepDefine, dto, assigner,
+                //     stepAssignInfo, traceType, expiredTime, stepConfig, cancellationToken);
+
+                targetStepNew = CreateStartStep(workflow, targetStepDefine, dto, assigner, stepAssignInfo, expiredTime);
+                stepConfig?.Invoke(workflow, currentStep, targetStepDefine, targetStep, targetStepNew);
+                await _workflowStepRepository.AddAsync(targetStepNew, cancellationToken);
+                workflow.Steps.Add(targetStepNew);
+                await CreateTraceAsync(workflow, targetStepNew, traceType, cancellationToken);
+            }
+            else
+            {
+                // targetStepNew = (await CreateStepsAsync(workflow, targetStepDefine, targetPrevStep, dto, assigner, [stepAssignInfo],
+                //     null, EWorkflowStepStatus.WaitForAccept, ECountersignPosition.None, true, traceType,
+                //     null, expiredTime, stepConfig: stepConfig, cancellationToken: cancellationToken)).First();
+
+                targetStepNew = CreateStep(workflow, targetStepDefine, targetPrevStep, stepAssignInfo, assigner,
+                    dto.NextStepCode, null, EWorkflowStepStatus.WaitForAccept, ECountersignPosition.None, expiredTime,
+                    dto.NextStepName, true, true, null, dto.BusinessType, dto.FlowDirection);
+                stepConfig?.Invoke(workflow, currentStep, targetStepDefine, targetStep, targetStepNew);
+                await _workflowStepRepository.AddAsync(targetStepNew, cancellationToken);
+                workflow.Steps.Add(targetStepNew);
+                await CreateTraceAsync(workflow, targetStepNew, traceType, cancellationToken);
+            }
 
 
             //更新实际办理节点信息
             //更新实际办理节点信息
             workflow.UpdateActualStepWhenAssign(targetStepNew, new FlowStepHandler
             workflow.UpdateActualStepWhenAssign(targetStepNew, new FlowStepHandler
@@ -1740,7 +1760,7 @@ namespace Hotline.FlowEngine.Workflows
         /// </summary>
         /// </summary>
         public async Task RecallToStartStepAsync(Workflow workflow, string opinion,
         public async Task RecallToStartStepAsync(Workflow workflow, string opinion,
             DateTime? expiredTime, bool isOrderFiled, EHandleMode handleMode,
             DateTime? expiredTime, bool isOrderFiled, EHandleMode handleMode,
-            Action<Workflow, WorkflowStep, StepDefine, WorkflowStep>? stepConfig = null,
+            Action<Workflow, WorkflowStep, StepDefine, WorkflowStep, WorkflowStep>? stepConfig = null,
             CancellationToken cancellationToken = default)
             CancellationToken cancellationToken = default)
         {
         {
             //todo 1.当前待办节点删掉 2.当前待办trace更新(status, opinion) 3.复制startStep为待办 4.更新workflow(status, csStatus, handlers) 5.publish event
             //todo 1.当前待办节点删掉 2.当前待办trace更新(status, opinion) 3.复制startStep为待办 4.更新workflow(status, csStatus, handlers) 5.publish event
@@ -1790,7 +1810,7 @@ namespace Hotline.FlowEngine.Workflows
         /// </summary>
         /// </summary>
         public async Task RecallToSendStepAsync(Workflow workflow, string opinion,
         public async Task RecallToSendStepAsync(Workflow workflow, string opinion,
             DateTime? expiredTime, bool isOrderFiled, EHandleMode handleMode,
             DateTime? expiredTime, bool isOrderFiled, EHandleMode handleMode,
-            Action<Workflow, WorkflowStep, StepDefine, WorkflowStep>? stepConfig = null,
+            Action<Workflow, WorkflowStep, StepDefine, WorkflowStep, WorkflowStep>? stepConfig = null,
             CancellationToken cancellationToken = default)
             CancellationToken cancellationToken = default)
         {
         {
             var sendStep = workflow.Steps.Where(d => d.BusinessType == EBusinessType.Send && d.IsOrigin)
             var sendStep = workflow.Steps.Where(d => d.BusinessType == EBusinessType.Send && d.IsOrigin)
@@ -1841,7 +1861,7 @@ namespace Hotline.FlowEngine.Workflows
         /// <returns>true 派单组  false 话务部</returns>
         /// <returns>true 派单组  false 话务部</returns>
         public async Task<(bool, Workflow workflow)> RecallToCenterFirstToSendAsync(string workflowId, string opinion,
         public async Task<(bool, Workflow workflow)> RecallToCenterFirstToSendAsync(string workflowId, string opinion,
             bool isOrderFiled, DateTime? expiredTime, EHandleMode handleMode,
             bool isOrderFiled, DateTime? expiredTime, EHandleMode handleMode,
-            Action<Workflow, WorkflowStep, StepDefine, WorkflowStep>? stepConfig = null,
+            Action<Workflow, WorkflowStep, StepDefine, WorkflowStep, WorkflowStep>? stepConfig = null,
             CancellationToken cancellationToken = default)
             CancellationToken cancellationToken = default)
         {
         {
             var isPaiDan = false;
             var isPaiDan = false;