田爽 1 anno fa
parent
commit
924f55bbd3

+ 59 - 28
src/Hotline.Api/Controllers/OrderController.cs

@@ -33,6 +33,11 @@ using XF.Domain.Constants;
 using XF.Domain.Exceptions;
 using XF.Domain.Repository;
 using XF.Utility.EnumExtensions;
+using Microsoft.IdentityModel.Tokens;
+using System.Linq;
+using Hotline.Share.Dtos.FlowEngine.Workflow;
+using System.Diagnostics;
+using System.Transactions;
 
 namespace Hotline.Api.Controllers;
 
@@ -209,6 +214,7 @@ public class OrderController : BaseController
     {
         //验证订单
         var order = await _orderRepository.GetAsync(dto.Id, HttpContext.RequestAborted);
+
         if (order is null)
             throw UserFriendlyException.SameMessage("未找到工单,无法发布");
 
@@ -242,26 +248,17 @@ public class OrderController : BaseController
         var seatDetail = new OrderVisitDetail();
         seatDetail.VisitId = visitId;
         seatDetail.VisitTarget = EVisitTarget.Seat;
-        if (order.ProcessType== EProcessType.Zhiban)
-        {
-            seatDetail.VoiceEvaluate = EVoiceEvaluate.Satisfied;
-            seatDetail.SeatEvaluate = ESeatEvaluate.Satisfied;
-            order.Visited("1", "满意");
-            await _orderRepository.UpdateAsync(order, HttpContext.RequestAborted);
-        }
+
         visitedDetail.Add(seatDetail);
 
-        if (order.ProcessType != EProcessType.Zhiban)
+        foreach (var item in dto.IdNames)
         {
-            foreach (var item in dto.IdNames)
-            {
-                var orgDetail = new OrderVisitDetail();
-                orgDetail.VisitId = visitId;
-                orgDetail.VisitOrgCode = item.Key;
-                orgDetail.VisitOrgName = item.Value;
-                orgDetail.VisitTarget = EVisitTarget.Org;
-                visitedDetail.Add(orgDetail);
-            }
+            var orgDetail = new OrderVisitDetail();
+            orgDetail.VisitId = visitId;
+            orgDetail.VisitOrgCode = item.Key;
+            orgDetail.VisitOrgName = item.Value;
+            orgDetail.VisitTarget = EVisitTarget.Org;
+            visitedDetail.Add(orgDetail);
         }
 
         await _mediator.Publish(new AddVisitNotify(visitedDetail), HttpContext.RequestAborted);
@@ -2352,8 +2349,25 @@ public class OrderController : BaseController
         await _orderSpecialRepository.AddAsync(model, HttpContext.RequestAborted);
         if (model.State == 1)
         {
-            //TODO 调用流程
-        }
+            var step =await _workflowStepRepository.GetAsync(dto.StepId);
+            var recall = new RecallDto
+            {
+	            WorkflowId = step?.WorkflowId!,
+	            NextStepCode = step.Code,
+	            NextStepName = step.Name,
+	            NextHandlers = step.Handlers
+            };
+            if (dto.AlterTime)
+            {
+				recall.External = new External
+				{
+					TimeLimit = dto.TimeLimit,
+					TimeLimitUnit = dto.TimeLimitUnit
+				};
+            }
+            if (dto.Files.Any()) recall.Additions = dto.Files;
+			await _workflowApplication.RecallAsync(recall, HttpContext.RequestAborted);
+		}
     }
 
     /// <summary>
@@ -2372,8 +2386,25 @@ public class OrderController : BaseController
         await _orderSpecialRepository.UpdateAsync(special, HttpContext.RequestAborted);
         if (special.State == 1)
         {
-            //TODO 调用流程
-        }
+			var step = await _workflowStepRepository.GetAsync(dto.StepId);
+			var recall = new RecallDto
+			{
+				WorkflowId = step?.WorkflowId!,
+				NextStepCode = step.Code,
+				NextStepName = step.Name,
+				NextHandlers = step.Handlers
+			};
+			if (dto.AlterTime)
+			{
+				recall.External = new External
+				{
+					TimeLimit = dto.TimeLimit,
+					TimeLimitUnit = dto.TimeLimitUnit
+				};
+			}
+            if (dto.Files.Any()) recall.Additions = dto.Files;
+			await _workflowApplication.RecallAsync(recall, HttpContext.RequestAborted);
+		}
     }
 
     /// <summary>
@@ -2387,7 +2418,7 @@ public class OrderController : BaseController
     {
         var (total, items) = await _orderSpecialRepository.Queryable()
             .Includes(x => x.Order)
-            .Includes(x => x.Trace)
+            .Includes(x => x.Step)
             .WhereIF(!string.IsNullOrEmpty(dto.Keyword),
                 x => x.Order.No.Contains(dto.Keyword!) || x.Order.Title.Contains(dto.Keyword!))
             .WhereIF(dto.State.HasValue, x => x.State == dto.State)
@@ -2450,7 +2481,7 @@ public class OrderController : BaseController
     {
         var item = await _orderSpecialRepository.Queryable()
             .Includes(x => x.Order)
-            .Includes(x => x.Trace)
+            .Includes(x => x.Step)
             .FirstAsync(x => x.Id == id);
         return _mapper.Map<OrderSpecialDto>(item);
     }
@@ -2466,8 +2497,8 @@ public class OrderController : BaseController
         {
             SpecialTimeType = EnumExts.GetDescriptions<ETimeType>(),
             SpecialReason = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.SpecialReason),
-            Traces = await _workflowTraceRepository.Queryable().Where(x => x.WorkflowId == id).ToListAsync()
-        };
+            Step = await _workflowApplication.GetRecallStepsAsync(id, HttpContext.RequestAborted)
+		};
         return rsp;
     }
 
@@ -2480,9 +2511,9 @@ public class OrderController : BaseController
     public async Task<int> SpecialHandleTime([FromQuery] OrderSpecialHandleTime dto)
     {
         var order = await _orderRepository.GetAsync(dto.OrderId);
-        var trace = await _workflowTraceRepository.GetAsync(dto.TraceId);
-        var org = await _organizeRepository.GetAsync(trace.HandlerOrgId);
-        if (org != null && org.IsCenter) return _timeLimitDomainService.GetOrderTimeLimitConfig(string.Empty);
+        var step = await _workflowStepRepository.GetAsync(dto.StepId);
+        var org = await _organizeRepository.GetAsync(step.HandlerOrgId);
+        if (org is { IsCenter: true }) return _timeLimitDomainService.GetOrderTimeLimitConfig(string.Empty);
         return _timeLimitDomainService.GetOrderTimeLimitConfig(order.AcceptTypeCode);
     }
 

+ 4 - 2
src/Hotline.Share/Dtos/FlowEngine/EndWorkflowDto.cs

@@ -1,4 +1,6 @@
-namespace Hotline.Share.Dtos.FlowEngine;
+using Hotline.Share.Dtos.File;
+
+namespace Hotline.Share.Dtos.FlowEngine;
 
 public class EndWorkflowDto
 {
@@ -10,7 +12,7 @@ public class EndWorkflowDto
     /// <summary>
     /// 附件
     /// </summary>
-    public List<string> Additions { get; set; } = new();
+    public List<FileDto> Additions { get; set; } = new();
 }
 
 public class EndWorkflowIdDto : EndWorkflowDto

+ 9 - 4
src/Hotline.Share/Dtos/Order/OrderSpecialDto.cs

@@ -19,7 +19,7 @@ namespace Hotline.Share.Dtos.Order
 		/// <summary>
 		/// 节点Id
 		/// </summary>
-		public string TraceId { get; set; }
+		public string StepId { get; set; }
 
 		/// <summary>
 		/// 特提原因
@@ -61,7 +61,7 @@ namespace Hotline.Share.Dtos.Order
 		/// <summary>
 		/// 节点Id
 		/// </summary>
-		public string TraceId { get; set; }
+		public string StepId { get; set; }
 
 		public string? OrgId { get; set; }
 
@@ -94,6 +94,11 @@ namespace Hotline.Share.Dtos.Order
 		/// </summary>
 		public bool AlterTime { get; set; }
 
+		/// <summary>
+		/// 附件列表
+		/// </summary>
+		public List<FileDto> Files { get; set; } = new();
+
 	}
 	public class OrderSpecialDto : OrderSpecialBaseDto
 	{
@@ -103,7 +108,7 @@ namespace Hotline.Share.Dtos.Order
 		/// <summary>
 		/// 节点Id
 		/// </summary>
-		public string TraceId { get; set; }
+		public string StepId { get; set; }
 
 		/// <summary>
 		/// 特提原因
@@ -204,6 +209,6 @@ namespace Hotline.Share.Dtos.Order
 	{
 		public string OrderId { get; set; }
 
-		public string TraceId { get; set; }
+		public string StepId { get; set; }
 	}
 }

+ 2 - 1
src/Hotline/Orders/OrderDelay.cs

@@ -1,4 +1,5 @@
 using Hotline.FlowEngine.Workflows;
+using Hotline.Share.Dtos.File;
 using Hotline.Share.Enums.Order;
 using Hotline.Share.Enums.Settings;
 using Hotline.Users;
@@ -88,7 +89,7 @@ namespace Hotline.Orders
         /// 附件
         /// </summary>
         [SugarColumn(ColumnDataType = "json", IsJson = true, IsNullable = true)]
-        public List<string> FileIds { get; set; }
+        public List<FileDto> FileIds { get; set; }
 
         /// <summary>
         /// 是否省延期

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

@@ -20,7 +20,7 @@ namespace Hotline.Orders
         /// <summary>
         /// 节点Id
         /// </summary>
-        public string TraceId { get; set; }
+        public string StepId { get; set; }
 
         /// <summary>
         /// 特提原因
@@ -65,8 +65,8 @@ namespace Hotline.Orders
 		/// <summary>
 		/// 特提节点
 		/// </summary>
-		[Navigate(NavigateType.OneToOne, nameof(TraceId))]
-		public WorkflowTrace Trace { get; set; }
+		[Navigate(NavigateType.OneToOne, nameof(StepId))]
+		public WorkflowStep Step { get; set; }
 
         /// <summary>
         /// 工单