using CMS.Plugin.FlowManagement.Abstractions;
using CMS.Plugin.FlowManagement.Abstractions.Models;
using CMS.Plugin.MesSuite.Abstractions.Models;
using CMS.Plugin.PipeLineLems.Domain.MyTestEntityNames;
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.PipeLineLems.FlowProcessors
{
///
/// 流程处理器
///
public class PipeLineLemsFlowProcessor : IFlowProcessor, ISingletonDependency
{
private readonly ILogger _logger;
private readonly IServiceProvider _serviceProvider;
///
/// Initializes a new instance of the class.
///
public PipeLineLemsFlowProcessor(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 mytestentitynameRepository = scope.ServiceProvider.GetRequiredService();
var count = await mytestentitynameRepository.GetCountAsync();
// 如果有更新数据库操作,需提交保存
// await uow.SaveChangesAsync();
_logger.LogInformation($"ProcessAsync,Count={count}");
}
///
public Task OnExitAsync(FlowProcessor flowProcessor, object sender, EventArgs args)
{
return Task.CompletedTask;
}
}
}