zs
2025-04-28 adbd9157eeff10b3212417550525d8ff3102edae
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
using CMS.Plugin.FlowManagement.Abstractions;
using CMS.Plugin.FlowManagement.Abstractions.Models;
using CMS.Plugin.MesSuite.Abstractions.Models;
using CMS.Plugin.HIAWms.Domain.WmsPlaces;
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
{
    /// <summary>
    /// 流程处理器
    /// </summary>
    public class HIAWmsFlowProcessor : IFlowProcessor, ISingletonDependency
    {
        private readonly ILogger<HIAWmsFlowProcessor> _logger;
        private readonly IServiceProvider _serviceProvider;
 
        /// <summary>
        /// Initializes a new instance of the <see cref="FlowProcessor"/> class.
        /// </summary>
        public HIAWmsFlowProcessor(ILogger<HIAWmsFlowProcessor> logger, IServiceProvider serviceProvider)
        {
            _logger = logger;
            _serviceProvider = serviceProvider;
        }
 
        /// <inheritdoc />
        public Task OnEnterAsync(FlowProcessor flowProcessor, object sender, EventArgs args)
        {
            return Task.CompletedTask;
        }
 
        /// <inheritdoc />
        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");
                }
            }
        }
 
        /// <summary>
        /// Processes the asynchronous.
        /// </summary>
        private async Task ProcessAsync()
        {
            using var scope = _serviceProvider.CreateScope();
            var unitOfWorkManager = scope.ServiceProvider.GetRequiredService<IUnitOfWorkManager>();
            using var uow = unitOfWorkManager.Begin(requiresNew: true);
            var wmsplaceRepository = scope.ServiceProvider.GetRequiredService<IWmsPlaceRepository>();
            var count = await wmsplaceRepository.GetCountAsync();
 
            // 如果有更新数据库操作,需提交保存
            // await uow.SaveChangesAsync();
 
            _logger.LogInformation($"ProcessAsync,Count={count}");
        }
 
        /// <inheritdoc />
        public Task OnExitAsync(FlowProcessor flowProcessor, object sender, EventArgs args)
        {
            return Task.CompletedTask;
        }
    }
}