Jelajahi Sumber

refactor: 1. 批量特提重构为批量更新 2.特提审批不全更新special.OrgId等4个字段

xf 2 bulan lalu
induk
melakukan
c3a8765ed3

+ 33 - 8
src/Hotline.Api/Controllers/OrderController.cs

@@ -6521,7 +6521,16 @@ public class OrderController : BaseController
         var order = await _orderRepository.GetAsync(x => x.Id == special.OrderId);
         if (special.State == 1)
         {
-            await _orderApplication.RecallAsync(dto, special, order, HttpContext.RequestAborted);
+            var (workflow, targetStepDefine, currentStep, targetStep, newStep, isOrgToCenter) = 
+                await _orderApplication.RecallAsync(dto, special, order, HttpContext.RequestAborted);
+
+            if (string.IsNullOrEmpty(currentStep?.HandlerOrgId))
+            {
+                special.OrgId = currentStep.HandlerOrgId;
+                special.OrgName = currentStep.HandlerOrgName;
+                special.StepName = currentStep.Name;
+                special.StepCode = currentStep.Code;
+            }
 
             if (order.Status >= EOrderStatus.Filed)
             {
@@ -6580,12 +6589,12 @@ public class OrderController : BaseController
     [LogFilter("批量审批工单特提")]
     public async Task UpdateBatch([FromBody] BatchAuditOrderSpecialDto dto)
     {
-        foreach (string id in dto.ids)
+        var specials = await _orderSpecialRepository.Queryable()
+            .Includes(d => d.Order)
+            .Where(d => dto.ids.Contains(d.Id))
+            .ToListAsync(HttpContext.RequestAborted);
+        foreach (var special in specials)
         {
-            var special = await _orderSpecialRepository
-                .Queryable()
-                .Includes(d => d.Order)
-                .FirstAsync(d => d.Id == id);
             if (special is null) throw UserFriendlyException.SameMessage("无效特提审批信息!");
             if (special.State != 0) throw UserFriendlyException.SameMessage("无效特提审批信息,特提审批信息错误,该信息已审核!");
             special.State = dto.State;
@@ -6595,9 +6604,12 @@ public class OrderController : BaseController
             else
                 special.ReplyFileJson = new List<Share.Dtos.File.FileJson>();
             
-            var order = await _orderRepository.GetAsync(x => x.Id == special.OrderId);
+            //var order = await _orderRepository.GetAsync(x => x.Id == special.OrderId);
+            var order = special.Order;
             if (special.State == 1)
             {
+                #region MyRegion
+
                 //var recall = new RecallDto
                 //{
                 //    WorkflowId = special.WorkflowId!,
@@ -6684,8 +6696,19 @@ public class OrderController : BaseController
                 //        .ExecuteCommandAsync(HttpContext.RequestAborted);
                 //}
 
+                #endregion
+
+                var (workflow, targetStepDefine, currentStep, targetStep, newStep, isOrgToCenter) =
                 await _orderApplication.RecallAsync(dto, special, order, HttpContext.RequestAborted);
 
+                if (string.IsNullOrEmpty(currentStep?.HandlerOrgId))
+                {
+                    special.OrgId = currentStep.HandlerOrgId;
+                    special.OrgName = currentStep.HandlerOrgName;
+                    special.StepName = currentStep.Name;
+                    special.StepCode = currentStep.Code;
+                }
+
                 if (order.Status >= EOrderStatus.Filed)
                 {
                     var publish = await _orderPublishRepository.GetAsync(x => x.OrderId == special.OrderId);
@@ -6732,8 +6755,10 @@ public class OrderController : BaseController
                     .Where(o => o.Id == order.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
             }
 
-            await _orderSpecialRepository.UpdateAsync(special, HttpContext.RequestAborted);
+            //await _orderSpecialRepository.UpdateAsync(special, HttpContext.RequestAborted);
         }
+
+        await _orderSpecialRepository.UpdateRangeAsync(specials, HttpContext.RequestAborted);
     }
 
     /// <summary>

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

@@ -423,6 +423,7 @@ namespace Hotline.Application.Orders
         /// <summary>
         /// 工单特提
         /// </summary>
-        Task<Order> RecallAsync(AuditOrderSpecialDto dto, OrderSpecial special, Order? order, CancellationToken cancellation);
+        Task<(Workflow, StepDefine, WorkflowStep, WorkflowStep, WorkflowStep, bool)> RecallAsync
+            (AuditOrderSpecialDto dto, OrderSpecial special, Order? order, CancellationToken cancellation);
     }
 }

+ 5 - 3
src/Hotline.Application/Orders/OrderApplication.cs

@@ -4011,7 +4011,8 @@ public class OrderApplication : IOrderApplication, IScopeDependency
     /// <summary>
     /// 工单特提
     /// </summary>
-    public async Task<Order> RecallAsync(AuditOrderSpecialDto dto, OrderSpecial special, Order? order, CancellationToken cancellation)
+    public async Task<(Workflow, StepDefine, WorkflowStep, WorkflowStep, WorkflowStep, bool)> RecallAsync
+        (AuditOrderSpecialDto dto, OrderSpecial special, Order? order, CancellationToken cancellation)
     {
         var recall = new RecallDto
         {
@@ -4065,7 +4066,8 @@ public class OrderApplication : IOrderApplication, IScopeDependency
 
         //todo 特提重办,按审批通过时间依据中心派至部门的规则计算期满时间,更新order
 
-        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,
             order.ExpiredTime, order.Status >= EOrderStatus.Filed, EHandleMode.Recall,
             async (workflow, currentStep, targetStepDefine, targetStep, targetStepNew) =>
@@ -4098,7 +4100,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
 
         await _orderRepository.UpdateAsync(order, cancellation);
 
-        return order;
+        return (workflow, targetStepDefine, currentStep, targetStep, newStep, isOrgToCenter);
     }
 
     #region private

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

@@ -90,8 +90,8 @@ namespace Hotline.FlowEngine.Workflows
         /// 退回(new)
         /// </summary>
         Task<(Workflow workflow, WorkflowStep currentStep, StepDefine prevDefine, 
-            WorkflowStep prevStep, WorkflowStep newStep, EFlowDirection flowDirection)> 
-            PreviousAsync(Workflow workflow, PreviousWorkflowDto dto, OperatorInfo operatorInfo,
+            WorkflowStep prevStep, WorkflowStep newStep, EFlowDirection flowDirection)> PreviousAsync
+            (Workflow workflow, PreviousWorkflowDto dto, OperatorInfo operatorInfo,
             Action<Workflow, StepDefine, WorkflowStep, WorkflowStep>? stepConfig = null,
             CancellationToken cancellationToken = default);
 

+ 6 - 6
src/Hotline/Orders/OrderSpecial.cs

@@ -101,12 +101,6 @@ namespace Hotline.Orders
 
 		public string? OrgName { get; set; }
 
-        /// <summary>
-        /// 工单
-        /// </summary>
-        [Navigate(NavigateType.OneToOne, nameof(OrderId))]
-        public Order Order { get; set; }
-
         [SugarColumn(ColumnDataType = "json", IsJson = true, IsNullable = true)]
         public List<FileJson>? FileJson { get; set; }
 
@@ -142,6 +136,12 @@ namespace Hotline.Orders
         /// </summary>
         [SugarColumn(ColumnDescription = "特提后最新节点Id")]
         public string? NewCurrentStepId { get; set; }
+
+        /// <summary>
+        /// 工单
+        /// </summary>
+        [Navigate(NavigateType.OneToOne, nameof(OrderId))]
+        public Order Order { get; set; }
     }
 
     //public class ReTransactError {