xf 5 kuukautta sitten
vanhempi
commit
13c49654ba

+ 155 - 151
src/Hotline.Api/Controllers/OrderController.cs

@@ -65,17 +65,7 @@ using XF.Domain.Repository;
 using XF.Utility.EnumExtensions;
 using Hotline.Application.Contracts.Validators.FlowEngine;
 using Hotline.Authentications;
-using Microsoft.AspNetCore.Components;
-using Quartz.Simpl;
-using static Lucene.Net.Util.Fst.Util;
-using DocumentFormat.OpenXml.Spreadsheet;
-using System.Threading;
-using Hotline.Caching.Services;
-using Hotline.CallCenter.Calls;
-using Hotline.CallCenter.BlackLists;
-using Hotline.Share.Mq;
 using Hotline.Share.Dtos.CallCenter;
-using NPOI.SS.Formula.Functions;
 
 namespace Hotline.Api.Controllers;
 
@@ -314,8 +304,8 @@ public class OrderController : BaseController
             .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(dto.PubRange == EPublicState.Pub, d => d.OrderPublish.PublishState)
+                                                                                              //.WhereIF(dto.PubRange == EPublicState.NoPub, d => !d.OrderPublish.PublishState)
             .WhereIF(dto.IsProvinceOrder.HasValue && dto.IsProvinceOrder == true, d => d.Source == ESource.ProvinceStraight)
             .WhereIF(dto.IsProvinceOrder.HasValue && dto.IsProvinceOrder == false, d => d.Source != ESource.ProvinceStraight)
             .WhereIF(dto.FiledType != null && dto.FiledType == FiledType.CenterFiled, d => d.ProcessType == EProcessType.Zhiban)
@@ -592,7 +582,7 @@ public class OrderController : BaseController
                 .Select(x => new Kv { Key = x.DicDataValue, Value = x.DicDataName }).ToList()
         };
         var (idName, idNames) = await _workflowDomainService.GetHandleOrgsAsync(order.WorkflowId, HttpContext.RequestAborted);
-        res.ActualHandleOrgName = new Kv() {  Key=order.ActualHandleOrgCode, Value= order.ActualHandleOrgName };
+        res.ActualHandleOrgName = new Kv() { Key = order.ActualHandleOrgCode, Value = order.ActualHandleOrgName };
         res.idNames = order.CounterSignType == null
             ? null
             : idNames.Where(d => d.Key != idName.Key).ToList();
@@ -740,9 +730,9 @@ public class OrderController : BaseController
         var users = await _userRepository.Queryable()
             .Includes(d => d.Organization)
             .Includes(d => d.Roles)
-            .WhereIF(!_appOptions.Value.IsZiGong,d => d.Roles.Any(x => roles.Contains(x.Name)))
+            .WhereIF(!_appOptions.Value.IsZiGong, d => d.Roles.Any(x => roles.Contains(x.Name)))
             .WhereIF(_appOptions.Value.IsZiGong, d => d.OrgId == OrgSeedData.CenterId)
-			.ToListAsync(HttpContext.RequestAborted);
+            .ToListAsync(HttpContext.RequestAborted);
         return users.Select(d => new OrderMigrationHandler
         {
             UserId = d.Id,
@@ -865,8 +855,8 @@ public class OrderController : BaseController
                      (d.Order.ExpiredTime > d.Order.ActualHandleTime && d.Order.Status >= EOrderStatus.Filed)) //否 超期
             .WhereIF(dto.StartTime.HasValue, d => d.VisitTime >= dto.StartTime)
             .WhereIF(dto.EndTime.HasValue, d => d.VisitTime <= dto.EndTime)
-            .WhereIF(dto.StartPublishTime.HasValue && dto.EndPublishTime.HasValue,d=> d.PublishTime>= dto.StartPublishTime && d.PublishTime <= dto.EndPublishTime) // 发布时间
-            .WhereIF(!string.IsNullOrEmpty(dto.ActualHandleOrgName),d=>d.Order.ActualHandleOrgName == dto.ActualHandleOrgName) //接办部门
+            .WhereIF(dto.StartPublishTime.HasValue && dto.EndPublishTime.HasValue, d => d.PublishTime >= dto.StartPublishTime && d.PublishTime <= dto.EndPublishTime) // 发布时间
+            .WhereIF(!string.IsNullOrEmpty(dto.ActualHandleOrgName), d => d.Order.ActualHandleOrgName == dto.ActualHandleOrgName) //接办部门
             .OrderByDescending(x => x.PublishTime)
             .WhereIF(dto.Channel.NotNullOrEmpty(), d => d.Order.SourceChannelCode == dto.Channel)
             .OrderByDescending(d => d.PublishTime)
@@ -1286,8 +1276,8 @@ public class OrderController : BaseController
         var users = await _userRepository.Queryable()
             .Includes(d => d.Organization)
             .Includes(d => d.Roles)
-            .WhereIF(!_appOptions.Value.IsZiGong,d => d.Roles.Any(x => roles.Contains(x.Name)))
-            .WhereIF(_appOptions.Value.IsZiGong,d=> d.OrgId == OrgSeedData.CenterId)
+            .WhereIF(!_appOptions.Value.IsZiGong, d => d.Roles.Any(x => roles.Contains(x.Name)))
+            .WhereIF(_appOptions.Value.IsZiGong, d => d.OrgId == OrgSeedData.CenterId)
             .ToListAsync(HttpContext.RequestAborted);
         return users.Select(d => new OrderMigrationHandler
         {
@@ -1312,60 +1302,60 @@ public class OrderController : BaseController
             .ExecuteCommandAsync(HttpContext.RequestAborted);
     }
 
-	/// <summary>
-	/// 部门满意度明细
-	/// </summary>
-	/// <param name="dto"></param>
-	/// <returns></returns>
-	[HttpGet("org-visitdetail-list")]
-	public async Task<PagedDto<OrgVisitDetailListResp>> OrgVisitDetailList([FromQuery] OrgVisitDetailListReq dto)
-	{
-		var query = _orderRepository.OrgVisitDetailFiltrationList(dto);
-		var (total, items) = await query.ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
-
-		return new PagedDto<OrgVisitDetailListResp>(total, _mapper.Map<IReadOnlyList<OrgVisitDetailListResp>>(items));
-	}
-
-	/// <summary>
-	/// 部门满意度明细导出
-	/// </summary>
-	/// <param name="dto"></param>
-	/// <returns></returns>
-	[HttpPost("org-visitdetail-list-export")]
-	public async Task<FileStreamResult> OrgVisitDetailListExport([FromBody] ExportExcelDto<OrgVisitDetailListReq> dto)
-	{
-		var query = _orderRepository.OrgVisitDetailFiltrationList(dto.QueryDto);
-
-		List<OrgVisitDetailListResp> orders;
-		if (dto.IsExportAll)
-		{
-			orders = await query.ToListAsync(HttpContext.RequestAborted);
-		}
-		else
-		{
-			var (_, items) = await query.ToPagedListAsync(dto.QueryDto, HttpContext.RequestAborted);
-			orders = items;
-		}
-		dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
-		var dtos = orders
-			.Select(stu => _mapper.Map(stu, typeof(OrgVisitDetailListResp), dynamicClass))
-			.Cast<object>()
-			.ToList();
-
-		var stream = ExcelHelper.CreateStream(dtos);
-		return ExcelStreamResult(stream, "部门满意度明细");
-	}
-
-	#endregion
-
-	#region 二次回访申请
-
-	/// <summary>
-	/// 可二次回访申请列表
-	/// </summary>
-	/// <param name="dto"></param>
-	/// <returns></returns>
-	[HttpGet("visitapply/visitagainlist")]
+    /// <summary>
+    /// 部门满意度明细
+    /// </summary>
+    /// <param name="dto"></param>
+    /// <returns></returns>
+    [HttpGet("org-visitdetail-list")]
+    public async Task<PagedDto<OrgVisitDetailListResp>> OrgVisitDetailList([FromQuery] OrgVisitDetailListReq dto)
+    {
+        var query = _orderRepository.OrgVisitDetailFiltrationList(dto);
+        var (total, items) = await query.ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
+
+        return new PagedDto<OrgVisitDetailListResp>(total, _mapper.Map<IReadOnlyList<OrgVisitDetailListResp>>(items));
+    }
+
+    /// <summary>
+    /// 部门满意度明细导出
+    /// </summary>
+    /// <param name="dto"></param>
+    /// <returns></returns>
+    [HttpPost("org-visitdetail-list-export")]
+    public async Task<FileStreamResult> OrgVisitDetailListExport([FromBody] ExportExcelDto<OrgVisitDetailListReq> dto)
+    {
+        var query = _orderRepository.OrgVisitDetailFiltrationList(dto.QueryDto);
+
+        List<OrgVisitDetailListResp> orders;
+        if (dto.IsExportAll)
+        {
+            orders = await query.ToListAsync(HttpContext.RequestAborted);
+        }
+        else
+        {
+            var (_, items) = await query.ToPagedListAsync(dto.QueryDto, HttpContext.RequestAborted);
+            orders = items;
+        }
+        dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
+        var dtos = orders
+            .Select(stu => _mapper.Map(stu, typeof(OrgVisitDetailListResp), dynamicClass))
+            .Cast<object>()
+            .ToList();
+
+        var stream = ExcelHelper.CreateStream(dtos);
+        return ExcelStreamResult(stream, "部门满意度明细");
+    }
+
+    #endregion
+
+    #region 二次回访申请
+
+    /// <summary>
+    /// 可二次回访申请列表
+    /// </summary>
+    /// <param name="dto"></param>
+    /// <returns></returns>
+    [HttpGet("visitapply/visitagainlist")]
     public async Task<PagedDto<OrderCanVisitAgainDto>> OrderVisitAgainList([FromQuery] OrderVisitAgainListDto dto)
     {
         var (total, items) = await _orderVisitedDetailRepository.Queryable()
@@ -1903,10 +1893,10 @@ public class OrderController : BaseController
             .WhereIF(dto.QueryDelayState is EQueryDelayState.Examining, d => d.DelayState == EDelayState.Examining)
             .WhereIF(dto.QueryDelayState is EQueryDelayState.Pass, d => d.DelayState == EDelayState.Pass)
             .WhereIF(dto.QueryDelayState is EQueryDelayState.NoPass, d => d.DelayState == EDelayState.NoPass)
-            .WhereIF(!string.IsNullOrEmpty(dto.CurrentStepName),d => !SqlFunc.IsNullOrEmpty(d.WorkflowId) && d.Workflow.ActualHandleStepName == dto.CurrentStepName) //当前节点
-            .WhereIF(!string.IsNullOrEmpty(dto.ActualHandlerName),d => !SqlFunc.IsNullOrEmpty(d.WorkflowId) && d.Workflow.ActualHandlerName == dto.ActualHandlerName) // 审批人
-            .WhereIF(!string.IsNullOrEmpty(dto.OrgLevelOneName),d => d.Order.OrgLevelOneName == dto.OrgLevelOneName) //一级部门
-            .WhereIF(dto.StartCreationTime.HasValue && dto.EndCreationTime.HasValue, d=>d.CreationTime >= dto.StartCreationTime && d.CreationTime <= dto.EndCreationTime) // 申请时间
+            .WhereIF(!string.IsNullOrEmpty(dto.CurrentStepName), d => !SqlFunc.IsNullOrEmpty(d.WorkflowId) && d.Workflow.ActualHandleStepName == dto.CurrentStepName) //当前节点
+            .WhereIF(!string.IsNullOrEmpty(dto.ActualHandlerName), d => !SqlFunc.IsNullOrEmpty(d.WorkflowId) && d.Workflow.ActualHandlerName == dto.ActualHandlerName) // 审批人
+            .WhereIF(!string.IsNullOrEmpty(dto.OrgLevelOneName), d => d.Order.OrgLevelOneName == dto.OrgLevelOneName) //一级部门
+            .WhereIF(dto.StartCreationTime.HasValue && dto.EndCreationTime.HasValue, d => d.CreationTime >= dto.StartCreationTime && d.CreationTime <= dto.EndCreationTime) // 申请时间
             .OrderByDescending(d => d.ApplyDelayTime)
             .ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
 
@@ -2281,7 +2271,9 @@ public class OrderController : BaseController
         try
         {
             dto.NextWorkflow.WorkflowId = screen.WorkflowId;
-            await _workflowApplication.NextAsync(dto.NextWorkflow, cancellationToken: HttpContext.RequestAborted);
+            //await _workflowApplication.NextAsync(dto.NextWorkflow, cancellationToken: HttpContext.RequestAborted);
+            await _workflowDomainService.NextAsync(_sessionContext, dto.NextWorkflow,
+                cancellationToken: HttpContext.RequestAborted);
         }
         catch (Exception e)
         {
@@ -3762,8 +3754,9 @@ public class OrderController : BaseController
                     var flowStepHandler = nextDto.NextHandlers.FirstOrDefault();
                     await _orderRepository.Updateable().SetColumns(o => new Order()
                     {
-	                    CenterToOrgHandlerId = flowStepHandler.UserId, CenterToOrgHandlerName = flowStepHandler.Username
-                    }).Where(o=>o.Id == order.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
+                        CenterToOrgHandlerId = flowStepHandler.UserId,
+                        CenterToOrgHandlerName = flowStepHandler.Username
+                    }).Where(o => o.Id == order.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
                 }
 
                 await _workflowDomainService.NextAsync(_sessionContext, nextDto, order.ExpiredTime, isAutoFillSummaryOpinion, cancellationToken);
@@ -3775,7 +3768,7 @@ public class OrderController : BaseController
                 orderHandleFlowDto.CrossSteps = orderHandleFlowDto.CrossSteps.OrderBy(d => d.Sort).ToList();
                 var stepCount = orderHandleFlowDto.CrossSteps.Count;
                 var unhandleSteps = new List<WorkflowStep> { startStep };
-                for (int i = 0;i < stepCount;i++)
+                for (int i = 0; i < stepCount; i++)
                 {
                     var crossStep = orderHandleFlowDto.CrossSteps[i];
                     var tempSteps = new List<WorkflowStep>();
@@ -4135,29 +4128,40 @@ public class OrderController : BaseController
     [HttpGet("waited")]
     public async Task<PagedDto<OrderDto>> QueryWaited([FromQuery] QueryOrderWaitedDto dto)
     {
+        var a = await _orderRepository.Queryable()
+            .LeftJoin<WorkflowStep>((o, s) => o.Id == s.ExternalId)
+            .Select((o, s) => new
+            {
+                no = o.No,
+                time = o.CreationTime,
+                sId = s.Id,
+                name = s.Name,
+                //sStatus = s.Status,
+                rn = SqlFunc.RowNumber(SqlFunc.Desc(s.CreationTime), o.Id)
+            })
+            .MergeTable()
+            .Where(d => d.rn == 1)
+            .OrderByDescending(d => d.time)
+            .Take(100)
+            .ToListAsync(HttpContext.RequestAborted);
+
+       var b = await _orderRepository.Queryable()
+            .Includes(d => d.WorkflowSteps.Where(s=>s.HandlerOrgId == _sessionContext.OrgId
+                                                    && s.Status != EWorkflowStepStatus.Handled)
+                .OrderByDescending(s=>s.CreationTime)
+                .Take(1)
+                .ToList())
+            .Where(d => d.WorkflowSteps.Any(s => s.HandlerOrgId == _sessionContext.OrgId
+                                                 && s.Status != EWorkflowStepStatus.Handled
+                                                 && s.StepType != EStepType.End))
+            .OrderByDescending(d => d.CreationTime)
+            .Take(100)
+            .ToListAsync(HttpContext.RequestAborted);
+
+
         var isHandledStep = dto.IsHandled.HasValue && dto.IsHandled.Value;
         if (isHandledStep)
             dto.QueryType = null;
-        
-
-        //var orderWithSteps = await _orderRepository.Queryable()
-        //    .LeftJoin<WorkflowStep>((o,s)=>o.Id== s.ExternalId)
-        //    .Select((o,s)=> new
-        //    {
-        //        order = o,
-        //        step = s
-        //    })
-        //    .MergeTable()
-        //    .Where(d=>d.step.Status!= EWorkflowStepStatus.Handled
-        //    && (d.step.FlowAssignType == EFlowAssignType.Org && d.step.HandlerOrgId == _sessionContext.OrgId
-        //    || d.step.FlowAssignType == EFlowAssignType.User && d.step.HandlerOrgId == _sessionContext.UserId
-        //    || d.step.FlowAssignType == EFlowAssignType.Role && _sessionContext.Roles.Contains(d.step.HandlerOrgId))
-        //    && d.step.StepType!= EStepType.End
-        //    )
-        //    .OrderByDescending(d=>d.order.CreationTime)
-        //    .Take(100)
-        //    .ToListAsync(HttpContext.RequestAborted);
-
 
         var isAdmin = _orderDomainService.IsCheckAdmin();
         var query = _orderRepository
@@ -4181,7 +4185,7 @@ public class OrderController : BaseController
             .Where(d => SqlFunc.Subqueryable<OrderDelay>().Where(od => od.OrderId == d.Id && od.IsDeleted == false && od.DelayState == EDelayState.Examining).NotAny())
             .Where(d => SqlFunc.Subqueryable<OrderSendBackAudit>().Where(osba => osba.OrderId == d.Id && osba.IsDeleted == false && osba.State == ESendBackAuditState.Apply)
                 .NotAny())
-            .Where(d=> SqlFunc.Subqueryable<OrderSpecial>().Where(s=>s.OrderId == d.Id).NotAny() || SqlFunc.Subqueryable<OrderSpecial>().Where(s=> s.OrderId == d.Id && s.State > 0).Any())
+            .Where(d => SqlFunc.Subqueryable<OrderSpecial>().Where(s => s.OrderId == d.Id).NotAny() || SqlFunc.Subqueryable<OrderSpecial>().Where(s => s.OrderId == d.Id && s.State > 0).Any())
             .WhereIF(dto.IsProvince.HasValue, d => d.IsProvince == dto.IsProvince)
             .WhereIF(!string.IsNullOrEmpty(dto.Keyword), d => d.Title.StartsWith(dto.Keyword))
             .WhereIF(!string.IsNullOrEmpty(dto.No), d => d.No == dto.No)
@@ -4275,12 +4279,12 @@ public class OrderController : BaseController
         //    .ToPagedListAsync(dto, HttpContext.RequestAborted);
 
         var (total, items) = await _orderRepository.Queryable()
-	        .Includes(d=>d.Workflow.Steps)
+            .Includes(d => d.Workflow.Steps)
             .Where(d => SqlFunc.Subqueryable<WorkflowTrace>()
                             .Where(step => step.ExternalId == d.Id &&
                                            step.HandlerOrgId == OrgSeedData.CenterId &&
                                            step.Status < EWorkflowStepStatus.Handled)
-                            .WhereIF(!string.IsNullOrEmpty(dto.CenterToOrgHandlerName),step=>step.BusinessType == EBusinessType.Send && step.HandlerName.Contains(dto.CenterToOrgHandlerName)).Any() ||
+                            .WhereIF(!string.IsNullOrEmpty(dto.CenterToOrgHandlerName), step => step.BusinessType == EBusinessType.Send && step.HandlerName.Contains(dto.CenterToOrgHandlerName)).Any() ||
                         (string.IsNullOrEmpty(d.WorkflowId) && string.IsNullOrEmpty(dto.CenterToOrgHandlerName))
             )
             .Where(d => d.Source < ESource.MLSQ || d.Source > ESource.WZSC)
@@ -4496,10 +4500,10 @@ public class OrderController : BaseController
                 audit.AuditTime = DateTime.Now;
                 if (prevStep.BusinessType == EBusinessType.Send)
                 {
-	                await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { CenterToOrgHandlerId = dto.Handler.UserId, CenterToOrgHandlerName = dto.Handler.Username })
-		                .Where(o => o.Id == order.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
+                    await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { CenterToOrgHandlerId = dto.Handler.UserId, CenterToOrgHandlerName = dto.Handler.Username })
+                        .Where(o => o.Id == order.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
                 }
-				var flowDirection = await _workflowApplication.PreviousAsync(dto, HttpContext.RequestAborted);
+                var flowDirection = await _workflowApplication.PreviousAsync(dto, HttpContext.RequestAborted);
                 var processType = flowDirection == EFlowDirection.OrgToCenter || flowDirection == EFlowDirection.CenterToCenter
                     ? EProcessType.Zhiban
                     : EProcessType.Jiaoban;
@@ -4517,10 +4521,10 @@ public class OrderController : BaseController
             audit.AuditTime = DateTime.Now;
             if (prevStep.BusinessType == EBusinessType.Send)
             {
-	            await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { CenterToOrgHandlerId = dto.Handler.UserId, CenterToOrgHandlerName = dto.Handler.Username })
-		            .Where(o => o.Id == order.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
+                await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { CenterToOrgHandlerId = dto.Handler.UserId, CenterToOrgHandlerName = dto.Handler.Username })
+                    .Where(o => o.Id == order.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
             }
-			var flowDirection = await _workflowApplication.PreviousAsync(dto, HttpContext.RequestAborted);
+            var flowDirection = await _workflowApplication.PreviousAsync(dto, HttpContext.RequestAborted);
             var processType = flowDirection == EFlowDirection.OrgToCenter || flowDirection == EFlowDirection.CenterToCenter
                 ? EProcessType.Zhiban
                 : EProcessType.Jiaoban;
@@ -4529,8 +4533,8 @@ public class OrderController : BaseController
             await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { ProcessType = processType, SendBackNum = order.SendBackNum })
                 .Where(o => o.Id == order.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
 
-			//发送短信TODO
-		}
+            //发送短信TODO
+        }
 
         await _orderSendBackAuditRepository.AddAsync(audit, HttpContext.RequestAborted);
     }
@@ -4577,8 +4581,8 @@ public class OrderController : BaseController
                         sendBack.SendBackData.Handler = handler;
                     }
                     await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { CenterToOrgHandlerId = sendBack.SendBackData.Handler.UserId, CenterToOrgHandlerName = sendBack.SendBackData.Handler.Username })
-	                    .Where(o => o.Id == sendBack.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
-				}
+                        .Where(o => o.Id == sendBack.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
+                }
             }
 
             //string applicantId, string applicantOrgId, string[] applicantRoleIds,
@@ -4596,8 +4600,8 @@ public class OrderController : BaseController
                 order.SendBackNum = order.SendBackNum.HasValue ? order.SendBackNum.Value + 1 : 1;
             await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { ProcessType = processType, SendBackNum = order.SendBackNum })
                 .Where(o => o.Id == sendBack.OrderId).ExecuteCommandAsync(HttpContext.RequestAborted);
-			//发送短信TODO
-		}
+            //发送短信TODO
+        }
         else
         {
             await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { Status = sendBack.Status.Value })
@@ -4649,8 +4653,8 @@ public class OrderController : BaseController
                             sendBack.SendBackData.Handler = handler;
                         }
                         await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { CenterToOrgHandlerId = sendBack.SendBackData.Handler.UserId, CenterToOrgHandlerName = sendBack.SendBackData.Handler.Username })
-	                        .Where(o => o.Id == sendBack.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
-					}
+                            .Where(o => o.Id == sendBack.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
+                    }
                 }
 
                 sendBack.SendBackData.ExpiredTime = order.ExpiredTime;
@@ -5116,10 +5120,10 @@ public class OrderController : BaseController
             await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderExpiredTimeUpdate, orderDto,
                 cancellationToken: HttpContext.RequestAborted);
             var flowStepHandler = recall.NextHandlers.FirstOrDefault();
-			await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { CenterToOrgHandlerId = flowStepHandler.UserId, CenterToOrgHandlerName = flowStepHandler.Username })
-	            .Where(o => o.Id == order.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
-			//}
-			await _workflowApplication.RecallAsync(recall, expiredTime.ExpiredTime, order.Status >= EOrderStatus.Filed, EWorkflowTraceType.Recall,
+            await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { CenterToOrgHandlerId = flowStepHandler.UserId, CenterToOrgHandlerName = flowStepHandler.Username })
+                .Where(o => o.Id == order.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
+            //}
+            await _workflowApplication.RecallAsync(recall, expiredTime.ExpiredTime, order.Status >= EOrderStatus.Filed, EWorkflowTraceType.Recall,
                 HttpContext.RequestAborted);
 
             if (order.Status >= EOrderStatus.Filed)
@@ -5305,10 +5309,10 @@ public class OrderController : BaseController
             var processType = dto.FlowDirection is EFlowDirection.OrgToCenter or EFlowDirection.CenterToCenter or EFlowDirection.FiledToCenter
                 ? EProcessType.Zhiban
                 : EProcessType.Jiaoban;
-			var flowStepHandler = recall.NextHandlers.FirstOrDefault();
-			await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { CenterToOrgHandlerId = flowStepHandler.UserId, CenterToOrgHandlerName = flowStepHandler.Username })
-				.Where(o => o.Id == order.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
-			await _workflowApplication.RecallAsync(recall, endTime, order.Status >= EOrderStatus.Filed, EWorkflowTraceType.Redo,
+            var flowStepHandler = recall.NextHandlers.FirstOrDefault();
+            await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { CenterToOrgHandlerId = flowStepHandler.UserId, CenterToOrgHandlerName = flowStepHandler.Username })
+                .Where(o => o.Id == order.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
+            await _workflowApplication.RecallAsync(recall, endTime, order.Status >= EOrderStatus.Filed, EWorkflowTraceType.Redo,
                 HttpContext.RequestAborted);
             //var publish = await _orderPublishRepository.GetAsync(x => x.OrderId == dto.OrderId);
             //if (publish != null)
@@ -5450,13 +5454,13 @@ public class OrderController : BaseController
             var orderDto = _mapper.Map<OrderDto>(order);
             await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderExpiredTimeUpdate, orderDto,
                 cancellationToken: HttpContext.RequestAborted);
-			//}
-			var flowStepHandler = recall.NextHandlers.FirstOrDefault();
-			await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { CenterToOrgHandlerId = flowStepHandler.UserId, CenterToOrgHandlerName = flowStepHandler.Username })
-				.Where(o => o.Id == order.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
-			//todo 特提重办,按审批通过时间依据中心派至部门的规则计算期满时间,更新order
+            //}
+            var flowStepHandler = recall.NextHandlers.FirstOrDefault();
+            await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { CenterToOrgHandlerId = flowStepHandler.UserId, CenterToOrgHandlerName = flowStepHandler.Username })
+                .Where(o => o.Id == order.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
+            //todo 特提重办,按审批通过时间依据中心派至部门的规则计算期满时间,更新order
 
-			await _workflowApplication.RecallAsync(recall, expiredTime.ExpiredTime, order.Status >= EOrderStatus.Filed, EWorkflowTraceType.Recall,
+            await _workflowApplication.RecallAsync(recall, expiredTime.ExpiredTime, order.Status >= EOrderStatus.Filed, EWorkflowTraceType.Recall,
                 HttpContext.RequestAborted);
             if (order.Status >= EOrderStatus.Filed)
             {
@@ -5600,13 +5604,13 @@ public class OrderController : BaseController
                 var orderDto = _mapper.Map<OrderDto>(order);
                 await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderExpiredTimeUpdate, orderDto,
                     cancellationToken: HttpContext.RequestAborted);
-				//}
-				var flowStepHandler = recall.NextHandlers.FirstOrDefault();
-				await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { CenterToOrgHandlerId = flowStepHandler.UserId, CenterToOrgHandlerName = flowStepHandler.Username })
-					.Where(o => o.Id == order.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
-				//todo 特提重办,按审批通过时间依据中心派至部门的规则计算期满时间,更新order
+                //}
+                var flowStepHandler = recall.NextHandlers.FirstOrDefault();
+                await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { CenterToOrgHandlerId = flowStepHandler.UserId, CenterToOrgHandlerName = flowStepHandler.Username })
+                    .Where(o => o.Id == order.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
+                //todo 特提重办,按审批通过时间依据中心派至部门的规则计算期满时间,更新order
 
-				await _workflowApplication.RecallAsync(recall, expiredTime.ExpiredTime, order.Status >= EOrderStatus.Filed, EWorkflowTraceType.Recall,
+                await _workflowApplication.RecallAsync(recall, expiredTime.ExpiredTime, order.Status >= EOrderStatus.Filed, EWorkflowTraceType.Recall,
                     HttpContext.RequestAborted);
                 if (order.Status >= EOrderStatus.Filed)
                 {
@@ -5851,7 +5855,7 @@ public class OrderController : BaseController
         var order = await _orderRepository.GetAsync(id, HttpContext.RequestAborted);
         var isInstaShot = order.SourceChannel.Contains("随手拍");
         var defaultStepKey = string.Empty;
-		List<Kv> orgs = new();
+        List<Kv> orgs = new();
         if (order == null) throw UserFriendlyException.SameMessage("无效工单信息!");
         //中心会签调取方法
         var org = await _workflowDomainService.GetLevelOneOrgsAsync(order.WorkflowId, HttpContext.RequestAborted);
@@ -5859,14 +5863,14 @@ public class OrderController : BaseController
         var step = await _workflowApplication.GetRecallStepsAsync(order.WorkflowId, HttpContext.RequestAborted);
         if (_appOptions.Value.IsZiGong)
         {
-			step.Steps = step.Steps.Where(x => x.Key.ToLower() != "start").ToList();
-			if (step.Steps.Where(x => x.BusinessType == EBusinessType.Department && x.OrgLevel == 1 ).Any())
-			{
-				var stepdDefault = step.Steps.Where(x => x.BusinessType == EBusinessType.Department && x.OrgLevel == 1)
-					.FirstOrDefault();
-				defaultStepKey = stepdDefault.Key;
-			}
-		}
+            step.Steps = step.Steps.Where(x => x.Key.ToLower() != "start").ToList();
+            if (step.Steps.Where(x => x.BusinessType == EBusinessType.Department && x.OrgLevel == 1).Any())
+            {
+                var stepdDefault = step.Steps.Where(x => x.BusinessType == EBusinessType.Department && x.OrgLevel == 1)
+                    .FirstOrDefault();
+                defaultStepKey = stepdDefault.Key;
+            }
+        }
         //获取部门信息
         var rsp = new
         {
@@ -5880,7 +5884,7 @@ public class OrderController : BaseController
             Step = step,
             Orgs = orgs,
             DefaultStepKey = defaultStepKey
-		};
+        };
         return rsp;
     }
 
@@ -6583,7 +6587,7 @@ public class OrderController : BaseController
     /// </summary>
     /// <param name="dto"></param>
     /// <returns></returns>
-   [HttpGet("order/about_expire/list_count")]
+    [HttpGet("order/about_expire/list_count")]
     public async Task<int> AboutListCountAsnc([FromQuery] AboutToExpireListDto dto)
     {
         var version = _systemSettingCacheManager.GetAboutToExpireVersion;
@@ -7573,12 +7577,12 @@ public class OrderController : BaseController
                     .Where(o => o.Id == dto.OrderId).ExecuteCommandAsync(HttpContext.RequestAborted);
             }
             else if (step.BusinessType == EBusinessType.Send)
-			{
+            {
                 await _orderRepository.Updateable()
                     .SetColumns(o => new Orders.Order() { Status = status, CenterToOrgHandlerId = dto.Handler.UserId, CenterToOrgHandlerName = dto.Handler.Username })
                     .Where(o => o.Id == dto.OrderId).ExecuteCommandAsync(HttpContext.RequestAborted);
             }
-            else 
+            else
             {
                 await _orderRepository.Updateable()
                     .SetColumns(o => new Orders.Order() { Status = status })

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

@@ -4,15 +4,11 @@ using Hotline.FlowEngine;
 using Hotline.FlowEngine.Definitions;
 using Hotline.FlowEngine.WorkflowModules;
 using Hotline.FlowEngine.Workflows;
-using Hotline.Identity.Accounts;
 using Hotline.Identity.Roles;
 using Hotline.Orders;
 using Hotline.Settings;
-using Hotline.Settings.TimeLimits;
 using Hotline.Share.Dtos;
 using Hotline.Share.Dtos.FlowEngine;
-using Hotline.Share.Dtos.FlowEngine.Definition;
-using Hotline.Share.Dtos.Settings;
 using Hotline.Share.Enums.FlowEngine;
 using Hotline.Share.Enums.Identity;
 using Hotline.Users;
@@ -28,15 +24,9 @@ using XF.Domain.Repository;
 using XF.Utility.EnumExtensions;
 using Hotline.Share.Dtos.File;
 using Microsoft.Extensions.Logging;
-using System.Text;
-using System.Diagnostics;
 using Hotline.Configurations;
 using Hotline.Share.Dtos.Order.Handle;
-using Microsoft.AspNetCore.Http;
-using Microsoft.Extensions.Options;
 using Newtonsoft.Json;
-using NPOI.SS.Formula.Functions;
-using DocumentFormat.OpenXml.Drawing;
 using Hotline.Share.Dtos.FlowEngine.Workflow;
 using SqlSugar;
 using Hotline.SeedData;

+ 2 - 2
src/Hotline.Repository.SqlSugar/Extensions/SqlSugarStartupExtensions.cs

@@ -216,8 +216,8 @@ namespace Hotline.Repository.SqlSugar.Extensions
                 ////获取原生SQL推荐 5.1.4.63  性能OK
                 //Log.Information(UtilMethods.GetNativeSql(sql, pars));
 
-                //Log.Information("Sql: {0}", sql);
-                //Log.Information("SqlParameters: {0}", string.Join(',', pars.Select(d => d.Value)));
+                Log.Information("Sql: {0}", sql);
+                Log.Information("SqlParameters: {0}", string.Join(',', pars.Select(d => d.Value)));
             };
             db.Aop.OnError = (exp) =>//SQL报错
             {

+ 3 - 0
src/Hotline/Orders/Order.cs

@@ -1158,6 +1158,9 @@ namespace Hotline.Orders
         [Navigate(NavigateType.OneToOne, nameof(CallId), nameof(TrCallRecord.OtherAccept))]
         public TrCallRecord CallRecord { get; set; }
 
+        [Navigate(NavigateType.OneToMany, nameof(WorkflowStep.ExternalId))]
+        public List<WorkflowStep> WorkflowSteps { get; set; }
+
         #region Method
 
         public void Cancel()