xf hai 3 semanas
pai
achega
2d77e7b2f1
Modificáronse 1 ficheiros con 61 adicións e 11 borrados
  1. 61 11
      src/Hotline.Api/Controllers/OrderController.cs

+ 61 - 11
src/Hotline.Api/Controllers/OrderController.cs

@@ -2362,16 +2362,22 @@ public class OrderController : BaseController
         var fail = 0;
         var success = 0;
         var workflowDto = dto.NextWorkflow;
-        foreach (var item in dto.DelayId)
+        var delays = await _orderDelayRepository.Queryable()
+            .Includes(x => x.Order)
+            .Includes(x => x.Workflow, d => d.WorkflowDefinition)
+            .Includes(x => x.Workflow, d => d.Steps)
+            .Includes(x => x.Workflow, d => d.Traces)
+            .Includes(x => x.Workflow, d => d.Countersigns)
+            .Where(x => dto.DelayId.Contains(x.Id))
+            .ToListAsync(HttpContext.RequestAborted);
+
+        var updateDelays = new List<OrderDelay>();
+        foreach (var delay in delays)
         {
             try
             {
-                var delay = await _orderDelayRepository.Queryable().Includes(x => x.Order).Where(x => x.Id == item)
-                    .FirstAsync(HttpContext.RequestAborted);
-                workflowDto.WorkflowId = delay.WorkflowId;
-                var workflowEntuty = await _workflowDomainService.GetWorkflowAsync(workflowDto.WorkflowId, withDefine: true, withSteps: true,
-                    cancellationToken: HttpContext.RequestAborted);
-                var currentStep = workflowEntuty.Steps.FirstOrDefault(d =>
+
+                var currentStep = delay.Workflow.Steps.FirstOrDefault(d =>
                         d.Status == EWorkflowStepStatus.WaitForAccept || d.Status == EWorkflowStepStatus.WaitForHandle);
 
                 NextStepsWithOpinionDto<NextStepOption> next = null;
@@ -2414,8 +2420,44 @@ public class OrderController : BaseController
                 workflowDto.StepId = next.StepId;
                 workflowDto.ReviewResult = dto.IsPass ? EReviewResult.Approval : EReviewResult.Failed;
 
-                if (workflowDto.ReviewResult == EReviewResult.Approval)
+                if (dto.IsPass)
                 {
+                    //处理工单延期
+                    var order = delay.Order;
+                    var expiredTimeBase = DateTime.Now;
+                    if (_appOptions.Value.IsZiGong)
+                    {
+                        expiredTimeBase = order.ExpiredTime.Value;
+                    }
+
+                    var startTime = DateTime.Now;
+                    if (order.CenterToOrgTime.HasValue)
+                    {
+                        startTime = order.CenterToOrgTime!.Value;
+                    }
+
+                    var expiredTimeConfig =
+                        await _expireTime.CalcEndTime(expiredTimeBase, startTime, new TimeConfig(delay.DelayNum, delay.DelayUnit), order.AcceptTypeCode);
+                    order.ExpiredTime = expiredTimeConfig.ExpiredTime;
+                    order.NearlyExpiredTime = expiredTimeConfig.NearlyExpiredTime;
+                    order.NearlyExpiredTimeOne = expiredTimeConfig.NearlyExpiredTimeOne;
+                    //TODO发送短信即将超期
+                    if (delay.IsProDelay)
+                    {
+                        order.ExpiredTimeProvince = expiredTimeConfig.ExpiredTime;
+                    }
+
+                    if (string.IsNullOrEmpty(order.WorkflowId))
+                        throw new UserFriendlyException("该工单流程id异常");
+                    await _workflowDomainService.UpdateUnhandleExpiredTimeAsync(order.WorkflowId, expiredTimeConfig.ExpiredTime, cancellationToken);
+
+                    await _orderRepository.UpdateAsync(order, cancellationToken);
+
+                    var orderDto = _mapper.Map<OrderDto>(order);
+                    await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderExpiredTimeUpdate, orderDto,
+                        cancellationToken: cancellationToken);
+
+
                     var isBatch = next.Steps.Where(x => x.Value == workflowDto.NextStepName).Any();
                     if (isBatch)
                     {
@@ -2430,7 +2472,8 @@ public class OrderController : BaseController
                         continue;
                     }
 
-                    await _workflowDomainService.NextAsync(workflowDto, cancellationToken: HttpContext.RequestAborted);
+                    await _workflowDomainService.NextAsync(delay.Workflow, workflowDto,
+                        cancellationToken: HttpContext.RequestAborted);
                 }
                 else
                 {
@@ -2439,6 +2482,13 @@ public class OrderController : BaseController
                 }
 
                 success++;
+
+                delay.DelayState = dto.IsPass ? EDelayState.Pass : EDelayState.NoPass;
+                updateDelays.Add(delay);
+                //await _orderDelayRepository.Updateable(delay)
+                //    .UpdateColumns(d => d.DelayState)
+                //    .ExecuteCommandAsync(cancellationToken);
+
             }
             catch (UserFriendlyException e)
             {
@@ -5219,7 +5269,7 @@ public class OrderController : BaseController
 
         // 随手拍业务处理
         await _orderSnapshotApplication.SaveOrderWorkflowInfo(dto);
-        
+
         //await _workflowApplication.NextAsync(dto.WorkflowDto, order.ExpiredTime, HttpContext.RequestAborted);
         var startStep = workflow.Steps.First(d => d.Id == dto.Workflow.StepId);
         await HandleOrderAsync(order, workflow, startStep, dto.Data, dto.Workflow, HttpContext.RequestAborted);
@@ -5600,7 +5650,7 @@ public class OrderController : BaseController
         if (string.IsNullOrEmpty(order.WorkflowId))
             throw UserFriendlyException.SameMessage("该工单未开启流程");
         var dto = await _workflowApplication.GetNextStepsAsync(order.WorkflowId, HttpContext.RequestAborted);
-       
+
         dto.ExpiredTime = order.ExpiredTime;
         dto.Content = order.Content;
         var rsp = _mapper.Map<NextStepsWithOpinionDto<RecommendStepOption>>(dto);