using CMS.Plugin.FlowManagement.Abstractions; using CMS.Plugin.FlowManagement.Abstractions.Models; using CMS.Plugin.MesSuite.Abstractions.Models; using CMS.Plugin.HIAWms.Domain.WmsContainers; using CMS.Plugin.OrderManagement.Abstractions.Models; using CMS.Plugin.ProcessManagement.Abstractions.Models; using CMS.Plugin.TraceManagement.Abstractions.Models.Traces; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using SYC.Flow.Kernel; using Volo.Abp.DependencyInjection; using Volo.Abp.Uow; namespace CMS.Plugin.HIAWms.FlowProcessors { /// /// 流程处理器 /// public class HIAWmsFlowProcessor : IFlowProcessor, ISingletonDependency { private readonly ILogger _logger; private readonly IServiceProvider _serviceProvider; /// /// Initializes a new instance of the class. /// public HIAWmsFlowProcessor(ILogger logger, IServiceProvider serviceProvider) { _logger = logger; _serviceProvider = serviceProvider; } /// public Task OnEnterAsync(FlowProcessor flowProcessor, object sender, EventArgs args) { return Task.CompletedTask; } /// public async Task OnExecuteAsync(FlowProcessor flowProcessor, object sender, EventArgs args) { if (sender is Activity activity) { var eventArgs = args as ProcessflowEventArgs; var procID = eventArgs.DataItems["Instance_ProcID"]; if (activity?.Name == "第三方系统合格判断") { // 工艺模型 var processModel = eventArgs.DataItems.ApplicationData as ProcessModel; // 工单模型 var orderModel = eventArgs.DataItems[FlowItemCollection.OrderModel] as OrderModel; // 产品模型 var productModel = eventArgs.DataItems[FlowItemCollection.ProductModel] as AssociationProductModel; // 追溯模型 var traceModel = eventArgs.DataItems[FlowItemCollection.TraceModel] as TraceModel; // 业务处理 await ProcessAsync(); _logger.LogInformation($"执行流程:实例={procID} -> {flowProcessor.ProcName} -> {activity.Name} ProductionFlowProcessor"); } } } /// /// Processes the asynchronous. /// private async Task ProcessAsync() { using var scope = _serviceProvider.CreateScope(); var unitOfWorkManager = scope.ServiceProvider.GetRequiredService(); using var uow = unitOfWorkManager.Begin(requiresNew: true); var wmscontainerRepository = scope.ServiceProvider.GetRequiredService(); var count = await wmscontainerRepository.GetCountAsync(); // 如果有更新数据库操作,需提交保存 // await uow.SaveChangesAsync(); _logger.LogInformation($"ProcessAsync,Count={count}"); } /// public Task OnExitAsync(FlowProcessor flowProcessor, object sender, EventArgs args) { return Task.CompletedTask; } } }