From e71bc24daa8f00768787e18f5daba09128abfc62 Mon Sep 17 00:00:00 2001
From: schangxiang@126.com <schangxiang@126.com>
Date: 周二, 29 4月 2025 10:59:40 +0800
Subject: [PATCH] Merge branch 'master' of http://222.71.245.114:9086/r/HIA24016N_PipeLineDemo

---
 HIAWms/server/src/CMS.Plugin.HIAWms/ProjectService/HIAWmsProjectService.cs |  165 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 165 insertions(+), 0 deletions(-)

diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms/ProjectService/HIAWmsProjectService.cs b/HIAWms/server/src/CMS.Plugin.HIAWms/ProjectService/HIAWmsProjectService.cs
new file mode 100644
index 0000000..fcc707e
--- /dev/null
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms/ProjectService/HIAWmsProjectService.cs
@@ -0,0 +1,165 @@
+using CMS.Plugin.FlowManagement.Abstractions.FlowBusiness;
+using CMS.Plugin.HIAWms.Apis;
+using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsContainers;
+using CMS.Plugin.HIAWms.Domain.WmsContainers;
+using CMS.Plugin.HIAWms.Jobs;
+using CMS.Project;
+using CMS.Project.Abstractions;
+using CMS.Unit.RuntimeValue.Abstractions;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Logging;
+using Volo.Abp.BackgroundJobs;
+using Volo.Abp.Uow;
+
+namespace CMS.Plugin.HIAWms.ProjectService
+{
+    /// <summary>
+    /// 宸ョ▼鏈嶅姟锛屽拰宸ョ▼鍏宠仈鐨勫悗鍙版湇鍔★紝褰�<see cref="IProjectServiceRunner"/>浠ュ綋鍓岾ey璋冪敤鏃朵細琚墽琛�
+    /// </summary>
+    public class HIAWmsProjectService : BaseProjectService
+    {
+        private IServiceProvider _serviceProvider;
+        private readonly ILogger<HIAWmsProjectService> _logger;
+        private readonly IVariableDataCache _variableDataCache;
+        private FlowVariableChannelListener _channelListener;
+        private Dictionary<string, string> _monitorVariableNames;
+
+        /// <summary>
+        /// 鏈嶅姟鐨凨ey锛屽敮涓�锛屼緵<see cref="IProjectServiceRunner"/>浣跨敤
+        /// </summary>
+        public override string Key => "HIAWms";
+
+        /// <summary>
+        /// 鏈嶅姟鎻忚堪锛屾樉绀哄湪鏈嶅姟鍒楄〃UI涓婄殑鍚嶇О
+        /// </summary>
+        public override string Description => "HIAWms鏈嶅姟";
+
+        /// <summary>
+        /// 鍚敤鎺堟潈
+        /// </summary>
+        public override bool AuthRequired => false;
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="HIAWmsProjectService"/> class.
+        /// </summary>
+        /// <param name="logger">The logger.</param>
+        /// <param name="variableDataCache">The variable data cache.</param>
+        public HIAWmsProjectService(IServiceProvider serviceProvider, ILogger<HIAWmsProjectService> logger, IVariableDataCache variableDataCache)
+        {
+            _serviceProvider = serviceProvider;
+            _logger = logger;
+            _variableDataCache = variableDataCache;
+        }
+
+        /// <summary>
+        /// 寮�鍚湇鍔�
+        /// </summary>
+        /// <param name="serviceProvider">鍏锋湁宸ョ▼涓婁笅鏂囩殑瀹炰緥</param>
+        public override async Task StartAsync(IServiceProvider serviceProvider)
+        {
+            if (State == ProjectServiceState.Started)
+            {
+                return;
+            }
+
+            // 鐩戝惉鍙橀噺
+            _monitorVariableNames = new Dictionary<string, string>
+            {
+                { "HIAWms_Variable1", "鐩戝惉鍙橀噺1" },
+                { "HIAWms_Variable2", "鐩戝惉鍙橀噺2" }
+            };
+
+            // 鍒涘缓閫氶亾鐩戝惉
+            _channelListener?.Token?.Dispose();
+            _channelListener = new FlowVariableChannelListener(_logger, _variableDataCache);
+            _channelListener.CreateChannel(Key, waitListener: false, timeout: TimeSpan.FromSeconds(30), variableFilter: _monitorVariableNames.Keys.ToHashSet());
+            _channelListener.TagChanged += OnTagValueChanged;
+
+            await base.StartAsync(serviceProvider);
+        }
+
+        /// <summary>
+        /// 鍋滄鏈嶅姟
+        /// </summary>
+        /// <param name="serviceProvider">鍏锋湁宸ョ▼涓婁笅鏂囩殑瀹炰緥</param>
+        public override async Task StopAsync(IServiceProvider serviceProvider)
+        {
+            if (_channelListener != null)
+            {
+                // 閲婃斁鐩戝惉
+                _channelListener.TagChanged -= OnTagValueChanged;
+                _channelListener.Token.Dispose();
+                _channelListener = null;
+            }
+
+            // 浣跨敤鍚庡彴浣滀笟寮傛澶勭悊
+            //await _serviceProvider.GetRequiredService<IBackgroundJobManager>().EnqueueAsync(new HIAWmsArgs
+            //{
+            //    Subject = "HIAWms_Subject",
+            //    Body = "HIAWms_Body",
+            //});
+
+
+            await base.StopAsync(serviceProvider);
+        }
+
+        /// <summary>
+        /// Called when [tag value changed].
+        /// </summary>
+        /// <param name="sender">The sender.</param>
+        /// <param name="e">The <see cref="TagChangedEventArgs"/> instance containing the event data.</param>
+        private async void OnTagValueChanged(object sender, TagChangedEventArgs e)
+        {
+            var changeds = e.Changeds.Where(x => _monitorVariableNames != null && _monitorVariableNames.ContainsKey(x.Name));
+            if (!changeds.Any())
+            {
+                return;
+            }
+
+            foreach (var changed in changeds)
+            {
+                var oldValue = changed.Old?.Value;
+                var newValue = changed.New?.Value;
+                var traceId = e.TraceId;
+
+                _logger.LogInformation($"{changed.Name} 鍙橀噺鍊煎彂鐢熷彉鍖栵紝鏃у�納oldValue}=鏂板�納newValue}锛孴raceId={traceId}");
+
+                // TODO: 澶勭悊鍙橀噺鍊煎彉鍖�
+                // Tips锛歨ttps://cms-docs.shengyc.com/cms/api/%E5%90%8E%E7%AB%AF#3-%E5%8F%98%E9%87%8F%E6%A8%A1%E5%9D%97
+                /* 璇存槑锛氶�氳繃璁㈤槄 IVariableDataCache.TagChanged 浜嬩欢锛屾偍鍙互瀹炴椂鐩戞帶鍙橀噺鐨勫彉鍖栥�傛浜嬩欢浼氫紶閫掓墍鏈夊彉閲忚嚦浜嬩欢澶勭悊鍑芥暟锛屽洜姝わ紝涓氬姟灞傞渶鍦ㄥ嚱鏁颁腑绛涢�夊叧娉ㄧ殑鍙橀噺銆�
+                    娉ㄦ剰浜嬮」锛�
+                    锛�1锛夋�ц兘褰卞搷锛� 鍙戝竷浜嬩欢鏃讹紝浜嬩欢鐨勫彂閫佽�呭皢闃诲娴佺▼銆傚洜姝わ紝寮虹儓寤鸿閬垮厤鍦ㄤ簨浠跺鐞嗗嚱鏁颁腑鎵ц I/ O 鎿嶄綔銆丠TTP 鎺ュ彛璁块棶鎴栧叾浠栬�楁椂鎿嶄綔锛屼互闃叉瀵圭郴缁熸�ц兘浜х敓涓ラ噸褰卞搷锛屽鑷存暣涓郴缁熷搷搴斿欢杩熴��
+                    锛�2锛夐珮棰戠巼瑙﹀彂锛� 鐢变簬浜嬩欢璁㈤槄浜嗗叏閲忓彉閲忥紝瑙﹀彂棰戠巼鍙兘闈炲父楂樸��
+                    锛�3锛夊紓姝ュ鐞嗭細 閴翠簬浜嬩欢瑙﹀彂棰戠巼寰堥珮锛屽缓璁笟鍔″眰鍦ㄧ瓫閫夊叧娉ㄥ彉閲忓悗锛屼娇鐢� Task 鍚姩鏂扮嚎绋嬪鐞嗕笟鍔¢�昏緫锛屼互閬垮厤闃诲鏍稿績鐨勫彉閲忕洃鍚姛鑳斤紝瀹炵幇涓氬姟灞備笌骞冲彴鍩哄骇鐨勮В鑰︺��
+                    锛�4锛夊苟鍙戠鐞嗭細 濡傛灉涓氬姟灞傚苟鍙戦噺澶э紝蹇呴』浼樺寲浠g爜璁捐鍜屽疄鏂斤紝浠ュ噺灏戝湪楂樺苟鍙戞儏鍐典笅鐨勭郴缁熻祫婧愭秷鑰楋紝闃叉绯荤粺鎬ц兘闂銆�
+                    锛�5锛変唬鐮佸畨鍏細 瀹夎骞朵娇鐢� CMS.CodeAnalysis 鍒嗘瀽鍣ㄦ潵鍒嗘瀽 IVariableDataCache.TagChanged 鐨勪娇鐢ㄦ儏鍐点�傝宸ュ叿鑳藉湪浣跨敤涓嶅綋鏃舵彁渚涚紪璇戦敊璇紝甯姪鎮ㄦ彁楂樹唬鐮佽川閲忋��*/
+
+                _ = Task.Run(async () =>
+                {
+                    // 渚�1锛氬悓姝ュ鐞�
+                    //await ProcessAsync();
+
+                    // 渚�2锛氳皟鐢ㄥ閮ˋPI
+                    //await ExecuteExternalApiAsync();
+                });
+            }
+        }
+
+        /// <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 wmscontainerRepository = scope.ServiceProvider.GetRequiredService<IWmsContainerRepository>();
+            var count = await wmscontainerRepository.GetCountAsync();
+
+            // 濡傛灉鏈夋洿鏂版暟鎹簱鎿嶄綔锛岄渶鎻愪氦淇濆瓨
+            // await uow.SaveChangesAsync();
+
+            _logger.LogInformation($"ProcessAsync锛孋ount={count}");
+        }
+    }
+}

--
Gitblit v1.9.3