Jason 1 жил өмнө
parent
commit
3bf3850033

+ 20 - 6
src/Hotline.Api/Controllers/OrderController.cs

@@ -608,22 +608,23 @@ public class OrderController : BaseController
     /// <returns></returns>
     [Permission(EPermission.ApplyDelay)]
     [HttpPost("delay")]
-    public async Task ApplyDelay([FromBody] ApplyDelayDto dto)
+    public async Task ApplyDelay([FromBody] DelayStartFlowDto dto)
     {
+        var delaydto = _mapper.Map<ApplyDelayDto>(dto.Data);
         //验证工单是否可以申请
-        var order = await _orderRepository.GetAsync(dto.OrderId, HttpContext.RequestAborted);
+        var order = await _orderRepository.GetAsync(delaydto.OrderId, HttpContext.RequestAborted);
         if (order is null)
             throw UserFriendlyException.SameMessage("无效工单");
         //验证工单是否在办理中
         if (order.Status == EOrderStatus.WaitForAccept || order.Status == EOrderStatus.Filed)
             throw UserFriendlyException.SameMessage("当前工单状态不能申请延期");
 
-        bool IsHas = await _orderDelayRepository.AnyAsync(x => x.OrderId == dto.OrderId && x.DelayState == EDelayState.Examining, HttpContext.RequestAborted);
+        bool IsHas = await _orderDelayRepository.AnyAsync(x => x.OrderId == delaydto.OrderId && x.DelayState == EDelayState.Examining, HttpContext.RequestAborted);
         if (IsHas)
             throw UserFriendlyException.SameMessage("该存在延期申请正在审核");
         //验证延期次数
         var setting = _systemSettingCacheManager.GetSetting(SettingConstants.DelayNum);
-        int count = await _orderDelayRepository.CountAsync(x => x.OrderId == dto.OrderId);
+        int count = await _orderDelayRepository.CountAsync(x => x.OrderId == delaydto.OrderId);
         if (count > int.Parse(setting?.SettingValue[0]))
             throw UserFriendlyException.SameMessage("延期申请已超过系统预定设置,不能申请");
 
@@ -635,11 +636,24 @@ public class OrderController : BaseController
         model.DelayState = EDelayState.Examining;
         if (model.BeforeDelay != null)
         {
-            model.AfterDelay = _timeLimitDomainService.CalcEndTime(model.BeforeDelay.Value, dto.DelayUnit, dto.DelayNum, false)?.EndTime;
+            model.AfterDelay = _timeLimitDomainService.CalcEndTime(model.BeforeDelay.Value, delaydto.DelayUnit, delaydto.DelayNum, false)?.EndTime;
         }
         model.ApplyDelayTime = DateTime.Now;
         model.No = order.No;
-        await _orderDelayRepository.AddAsync(model, HttpContext.RequestAborted);
+        var id = await _orderDelayRepository.AddAsync(model, HttpContext.RequestAborted);
+        try
+        {
+
+            var startDto = _mapper.Map<StartWorkflowDto>(dto.Workflow);
+            startDto.DefinitionModuleCode = WorkflowModuleConsts.OrderDelay;
+            startDto.Title = model.DelayReason;
+            await _workflowApplication.StartWorkflowAsync(startDto, id, HttpContext.RequestAborted);
+        }
+        catch (Exception ex)
+        {
+            await _orderDelayRepository.RemoveAsync(id, false, HttpContext.RequestAborted);
+            throw new UserFriendlyException($"工单延期流程失败!, {ex.Message}", "工单延期流程失败");
+        }
     }
 
     /// <summary>

+ 5 - 0
src/Hotline.Share/Dtos/Order/OrderStartFlowDto.cs

@@ -16,4 +16,9 @@ namespace Hotline.Share.Dtos.Order
     {
 
     }
+
+    public class DelayStartFlowDto : StartWorkflowDto<ApplyDelayDto>
+    {
+
+    }
 }