Kaynağa Gözat

修复归档后自动发布工单状态判断问题

qinchaoyue 5 ay önce
ebeveyn
işleme
91878d09a3

+ 1 - 0
src/Hotline.Application/Handlers/FlowEngine/WorkflowEndHandler.cs

@@ -219,6 +219,7 @@ public class WorkflowEndHandler : INotificationHandler<EndWorkflowNotify>
                     orderFlowDto.IsNonPoliceReturn = notification.Dto.External == null ? false : notification.Dto.External.IsPoliceReturn;
                     await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderFiled, orderFlowDto, cancellationToken: cancellationToken);
 
+                    await _orderDomainService.OrderAutomaticPublishAsync(order, cancellationToken);
                     //try
                     //{
                     //    //写入质检  针对受理之后直接结束的工单

+ 4 - 0
src/Hotline.Application/Hotline.Application.csproj

@@ -29,4 +29,8 @@
     <ProjectReference Include="..\XingTang.Sdk\XingTang.Sdk.csproj" />
   </ItemGroup>
 
+  <ItemGroup>
+    <Folder Include="Orders\OrderPublishHandler\" />
+  </ItemGroup>
+
 </Project>

+ 0 - 103
src/Hotline.Application/Orders/OrderPublishHandler/OrderPublishEndWorkflowHandler.cs

@@ -1,103 +0,0 @@
-using DotNetCore.CAP;
-using Hotline.Caching.Interfaces;
-using Hotline.Configurations;
-using Hotline.ContingencyManagement.Notifies;
-using Hotline.EventBus;
-using Hotline.FlowEngine.Notifications;
-using Hotline.FlowEngine.WorkflowModules;
-using Hotline.Orders;
-using Hotline.Settings;
-using Hotline.Share.Dtos;
-using Hotline.Share.Dtos.Order;
-using Hotline.Share.Enums.FlowEngine;
-using Hotline.Share.Enums.Order;
-using Hotline.Share.Tools;
-using Mapster;
-using MediatR;
-using Microsoft.AspNetCore.Http;
-using Microsoft.Extensions.Logging;
-using Microsoft.Extensions.Options;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using XF.Domain.Authentications;
-using XF.Domain.Repository;
-
-namespace Hotline.Application.Orders.OrderPublishHandler;
-
-/// <summary>
-/// 中心直办件归档后默认自动发布
-/// </summary>
-public class OrderPublishEndWorkflowHandler : INotificationHandler<EndWorkflowNotify>
-{
-    private readonly IOrderRepository _orderRepository;
-    private readonly Publisher _publisher;
-    private readonly IOptionsSnapshot<AppConfiguration> _appOptions;
-    private readonly IRepository<OrderPublish> _orderPublishRepository;
-    private readonly ISessionContextProvider _sessionContextProvider;
-    private readonly ICapPublisher _capPublisher;
-    private readonly ISystemSettingCacheManager _systemSettingCacheManager;
-    private readonly IOrderDomainService _orderDomainService;
-    private readonly IOrderVisitRepository _orderVisitRepository;
-    private readonly IRepository<OrderVisitDetail> _orderVisitedDetailRepository;
-    private readonly ILogger<OrderPublishEndWorkflowHandler> _logger;
-    private readonly ISystemLogRepository _systemLogRepository;
-    private const string Name = "中心直办件归档后默认自动发布";
-    private string ClassName = nameof(OrderPublishEndWorkflowHandler);
-
-    public OrderPublishEndWorkflowHandler(IOrderRepository orderRepository, IRepository<OrderPublish> orderPublishRepository, ISessionContextProvider sessionContextProvider, ICapPublisher capPublisher, ISystemSettingCacheManager systemSettingCacheManager, Publisher publisher, IOptionsSnapshot<AppConfiguration> appOptions, IOrderVisitRepository orderVisitRepository, IRepository<OrderVisitDetail> orderVisitedDetailRepository, ILogger<OrderPublishEndWorkflowHandler> logger, ISystemLogRepository systemLogRepository, IOrderDomainService orderDomainService)
-    {
-        _orderRepository = orderRepository;
-        _orderPublishRepository = orderPublishRepository;
-        _sessionContextProvider = sessionContextProvider;
-        _capPublisher = capPublisher;
-        _systemSettingCacheManager = systemSettingCacheManager;
-        _publisher = publisher;
-        _appOptions = appOptions;
-        _orderVisitRepository = orderVisitRepository;
-        _orderVisitedDetailRepository = orderVisitedDetailRepository;
-        _logger = logger;
-        _systemLogRepository = systemLogRepository;
-        _orderDomainService = orderDomainService;
-    }
-
-    public async Task Handle(EndWorkflowNotify notification, CancellationToken cancellationToken)
-    {
-        await _systemLogRepository.AddAsync(Name, notification.Workflow.ExternalId, "进入方法", ClassName, status: 1);
-        try
-        {
-            if (_systemSettingCacheManager.AutomaticPublishOrder == false)
-            {
-                return;
-            }
-            if (notification.Workflow.ModuleCode != WorkflowModuleConsts.OrderHandle)
-                return;
-            var order = await _orderRepository.GetAsync(notification.Workflow.ExternalId, cancellationToken);
-            if (order == null)
-            {
-                await _systemLogRepository.AddAsync(Name, notification.Workflow.ExternalId, "根据 workflow.ExternalId 查询 order 为空", ClassName);
-                return;
-            }
-            var checkResult = order.AutoPublishCheck();
-            if (checkResult.NotNullOrEmpty())
-            {
-                await _systemLogRepository.AddAsync(Name, order.Id, checkResult);
-                return;
-            }
-
-            if (order.ProcessType != EProcessType.Zhiban)
-            {
-                await _systemLogRepository.AddAsync(Name, order.Id, "非中心直办件", ClassName);
-                return;
-            }
-
-            await _orderDomainService.OrderPublishAsync(order, cancellationToken);
-        }
-        catch (Exception e)
-        {
-            await _systemLogRepository.AddAsync(Name, notification.Workflow.ExternalId, $"系统异常: {e.Message}", ClassName);
-        }
-    }
-}

+ 1 - 5
src/Hotline/FlowEngine/Workflows/WorkflowDomainService.cs

@@ -38,7 +38,6 @@ namespace Hotline.FlowEngine.Workflows
         private readonly ISystemSettingCacheManager _systemSettingCacheManager;
         private readonly IWfModuleCacheManager _wfModuleCacheManager;
         private readonly ISessionContextProvider _sessionContextProvider;
-        private readonly ISystemLogRepository _systemLogRepository;
 
         public WorkflowDomainService(
             IWorkflowRepository workflowRepository,
@@ -51,8 +50,7 @@ namespace Hotline.FlowEngine.Workflows
             IMapper mapper,
             Publisher publisher,
             ILogger<WorkflowDomainService> logger,
-            IFileRepository fileRepository,
-            ISystemLogRepository systemLogRepository)
+            IFileRepository fileRepository)
         {
             _workflowRepository = workflowRepository;
             _workflowStepRepository = workflowStepRepository;
@@ -65,7 +63,6 @@ namespace Hotline.FlowEngine.Workflows
             _systemSettingCacheManager = systemSettingCacheManager;
             _wfModuleCacheManager = wfModuleCacheManager;
             _sessionContextProvider = sessionContextProvider;
-            _systemLogRepository = systemLogRepository;
         }
 
         public async Task<Workflow> CreateWorkflowAsync(WorkflowModule wfModule, string title, string userId,
@@ -1923,7 +1920,6 @@ namespace Hotline.FlowEngine.Workflows
                 workflow.UpdateLevelOneOrg(workflow.ActualHandleOrgCode, workflow.ActualHandleOrgName);
 
             await _workflowRepository.UpdateAsync(workflow, cancellationToken);
-            await _systemLogRepository.AddAsync("流程领域", workflow.ExternalId, "流程结束");
 
             await _publisher.PublishAsync(new EndWorkflowNotify(workflow, endTrace, dto),
                 PublishStrategy.ParallelWhenAll, cancellationToken);

+ 1 - 0
src/Hotline/Orders/IOrderDomainService.cs

@@ -103,5 +103,6 @@ namespace Hotline.Orders
         /// <returns></returns>
         Task SendOverTimeSms(CancellationToken cancellationToken);
         Task OrderPublishAsync(Order order, CancellationToken cancellationToken);
+        Task OrderAutomaticPublishAsync(Order order, CancellationToken cancellationToken);
     }
 }

+ 42 - 1
src/Hotline/Orders/OrderDomainService.cs

@@ -32,6 +32,7 @@ using Mapster;
 using Microsoft.AspNetCore.Builder.Extensions;
 using Hotline.Configurations;
 using Microsoft.Extensions.Options;
+using Hotline.Share.Tools;
 
 namespace Hotline.Orders;
 
@@ -59,6 +60,7 @@ public class OrderDomainService : IOrderDomainService, IScopeDependency
     private readonly IRepository<Hotspot> _hotspotRepository;
     private readonly IMediator _mediator;
     private readonly IRepository<WorkflowStep> _workflowStepRepository;
+    private readonly ISystemLogRepository _systemLogRepository;
 
     public OrderDomainService(
         IOrderRepository orderRepository,
@@ -82,7 +84,8 @@ public class OrderDomainService : IOrderDomainService, IScopeDependency
         IMediator mediator,
         Publisher publisher,
         IRepository<OrderVisitDetail> orderVisitDetailRepository,
-        IRepository<WorkflowStep> workflowStepRepository)
+        IRepository<WorkflowStep> workflowStepRepository,
+        ISystemLogRepository systemLogRepository)
     {
         _orderRepository = orderRepository;
         _orderRedoRepository = orderRedoRepository;
@@ -105,6 +108,43 @@ public class OrderDomainService : IOrderDomainService, IScopeDependency
         _publisher = publisher;
         _orderVisitDetailRepository = orderVisitDetailRepository;
         _workflowStepRepository = workflowStepRepository;
+        _systemLogRepository = systemLogRepository;
+    }
+
+    /// <summary>
+    /// 归档后自动发布
+    /// </summary>
+    /// <param name="order"></param>
+    /// <param name="cancellationToken"></param>
+    /// <returns></returns>
+    public async Task OrderAutomaticPublishAsync(Order order, CancellationToken cancellationToken)
+    {
+        var name = "中心直办件归档后默认自动发布";
+        try
+        {
+            if (_systemSettingCacheManager.AutomaticPublishOrder == false)
+            {
+                return;
+            }
+            var checkResult = order.AutoPublishCheck();
+            if (checkResult.NotNullOrEmpty())
+            {
+                await _systemLogRepository.AddAsync(name, order.Id, checkResult);
+                return;
+            }
+
+            if (order.ProcessType != EProcessType.Zhiban)
+            {
+                await _systemLogRepository.AddAsync(name, order.Id, "非中心直办件");
+                return;
+            }
+
+            await OrderPublishAsync(order, cancellationToken);
+        }
+        catch (Exception e)
+        {
+            await _systemLogRepository.AddAsync(name, order.Id, $"系统异常: {e.Message}");
+        }
     }
 
     public async Task OrderPublishAsync(Order order, CancellationToken cancellationToken)
@@ -703,6 +743,7 @@ public class OrderDomainService : IOrderDomainService, IScopeDependency
         return $"{today:yyyyMMdd}{count:000000}";
     }
 
+
     #endregion
 }