From 61361fabdb34b5aab1b7b349be827681b7c56c53 Mon Sep 17 00:00:00 2001
From: schangxiang@126.com <schangxiang@126.com>
Date: 周日, 11 5月 2025 21:55:32 +0800
Subject: [PATCH] 222

---
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems/ProjectService/PipeLineLemsProjectService - 复制.cs |  341 ++++++++++++++++++++++++++++++++++++++++++++++++
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems/ProjectService/PipeLineLemsProjectService.cs      |   20 +-
 2 files changed, 353 insertions(+), 8 deletions(-)

diff --git "a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems/ProjectService/PipeLineLemsProjectService - \345\244\215\345\210\266.cs" "b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems/ProjectService/PipeLineLemsProjectService - \345\244\215\345\210\266.cs"
new file mode 100644
index 0000000..7c4b5c0
--- /dev/null
+++ "b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems/ProjectService/PipeLineLemsProjectService - \345\244\215\345\210\266.cs"
@@ -0,0 +1,341 @@
+//using CMS.Extensions.Variable;
+//using CMS.Plugin.FlowManagement.Abstractions.FlowBusiness;
+//using CMS.Plugin.PipeLineLems.Apis;
+//using CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.MyTestEntityNames;
+//using CMS.Plugin.PipeLineLems.Domain.MyTestEntityNames;
+//using CMS.Plugin.PipeLineLems.Jobs;
+//using CMS.Plugin.ProcessManagement.Abstractions;
+//using CMS.Plugin.TraceManagement.Abstractions.Models.Traces;
+//using CMS.Plugin.TraceManagement.Abstractions;
+//using CMS.Project;
+//using CMS.Project.Abstractions;
+//using CMS.Unit.RuntimeValue.Abstractions;
+//using KissUtil.Extensions;
+//using Microsoft.Extensions.DependencyInjection;
+//using Microsoft.Extensions.Logging;
+//using System;
+//using Volo.Abp.BackgroundJobs;
+//using Volo.Abp.Uow;
+
+//namespace CMS.Plugin.PipeLineLems.ProjectService
+//{
+//    /// <summary>
+//    /// 宸ョ▼鏈嶅姟锛屽拰宸ョ▼鍏宠仈鐨勫悗鍙版湇鍔★紝褰�<see cref="IProjectServiceRunner"/>浠ュ綋鍓岾ey璋冪敤鏃朵細琚墽琛�
+//    /// </summary>
+//    public class PipeLineLemsProjectService : BaseProjectService
+//    {
+//        private IServiceProvider _serviceProvider;
+//        private readonly ILogger<PipeLineLemsProjectService> _logger;
+//        private readonly IVariableDataCache _variableDataCache;
+
+//        /// <summary>
+//        /// 鍙橀噺鏈嶅姟
+//        /// </summary>
+//        private readonly VariableService _variableService;
+//        private FlowVariableChannelListener _channelListener;
+//        private Dictionary<string, string> _monitorVariableNames;
+
+//        /// <summary>
+//        /// 鏈嶅姟鐨凨ey锛屽敮涓�锛屼緵<see cref="IProjectServiceRunner"/>浣跨敤
+//        /// </summary>
+//        public override string Key => "PipeLineLems";
+
+//        /// <summary>
+//        /// 鏈嶅姟鎻忚堪锛屾樉绀哄湪鏈嶅姟鍒楄〃UI涓婄殑鍚嶇О
+//        /// </summary>
+//        public override string Description => "PipeLineLems鏈嶅姟";
+
+//        /// <summary>
+//        /// 鍚敤鎺堟潈
+//        /// </summary>
+//        public override bool AuthRequired => true;
+
+//        /// <summary>
+//        /// Initializes a new instance of the <see cref="PipeLineLemsProjectService"/> class.
+//        /// </summary>
+//        /// <param name="logger">The logger.</param>
+//        /// <param name="variableDataCache">The variable data cache.</param>
+//        public PipeLineLemsProjectService(
+//            VariableService variableService,
+//            IServiceProvider serviceProvider, ILogger<PipeLineLemsProjectService> logger, IVariableDataCache variableDataCache)
+//        {
+//            _serviceProvider = serviceProvider;
+//            _logger = logger;
+//            _variableDataCache = variableDataCache;
+//            _variableService = variableService;
+//        }
+
+//        /// <summary>
+//        /// 寮�鍚湇鍔�
+//        /// </summary>
+//        /// <param name="serviceProvider">鍏锋湁宸ョ▼涓婁笅鏂囩殑瀹炰緥</param>
+//        public override async Task StartAsync(IServiceProvider serviceProvider)
+//        {
+//            if (State == ProjectServiceState.Started)
+//            {
+//                return;
+//            }
+
+//            // 鐩戝惉鍙橀噺
+//            _monitorVariableNames = new Dictionary<string, string>
+//            {
+//                { "鎵撶爜杩涚珯淇″彿", "鎵撶爜杩涚珯淇″彿(鎻忚堪)" },
+//                { "鍒囧壊杩涚珯淇″彿", "鍒囧壊杩涚珯淇″彿(鎻忚堪)" },
+//            };
+
+//            // 鍒涘缓閫氶亾鐩戝惉
+//            _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 PipeLineLemsArgs
+//            //{
+//            //    Subject = "PipeLineLems_Subject",
+//            //    Body = "PipeLineLems_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}");
+
+//                if (changed.Name == "鎵撶爜杩涚珯淇″彿" && changed.New?.Value.SafeString().ToBool() == true)
+//                {
+
+//                    // 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 () =>
+//                    {
+//                        await HanlderForPringBarCodeAsync();
+//                        // 渚�1锛氬悓姝ュ鐞�
+//                        //await ProcessAsync();
+
+//                        // 渚�2锛氳皟鐢ㄥ閮ˋPI
+//                        //await ExecuteExternalApiAsync();
+//                    });
+//                }
+
+//                if (changed.Name == "鍒囧壊杩涚珯淇″彿" && changed.New?.Value.SafeString().ToBool() == true)
+//                {
+
+//                    // 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 () =>
+//                    {
+//                        await HanlderForCutAsync();
+//                        // 渚�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 mytestentitynameRepository = scope.ServiceProvider.GetRequiredService<IMyTestEntityNameRepository>();
+//            var count = await mytestentitynameRepository.GetCountAsync();
+
+//            // 濡傛灉鏈夋洿鏂版暟鎹簱鎿嶄綔锛岄渶鎻愪氦淇濆瓨
+//            // await uow.SaveChangesAsync();
+
+//            _logger.LogInformation($"ProcessAsync锛孋ount={count}");
+//        }
+
+//        /// <summary>
+//        /// Executes the external API.
+//        /// </summary>
+//        private async Task ExecuteExternalApiAsync()
+//        {
+//            try
+//            {
+//                await _serviceProvider.GetRequiredService<IPipeLineLemsExternalApi>().CreateAsync(new MyTestEntityNameCreateDto
+//                {
+//                    Name = "MyTestEntityName_Name",
+//                    Code = "MyTestEntityName_Code",
+//                });
+//            }
+//            catch (Exception e)
+//            {
+//                _logger.LogException(e);
+//            }
+//        }
+
+//        /// <summary>
+//        /// 鎵撶爜
+//        /// </summary>
+//        /// <returns></returns>
+//        private async Task HanlderForPringBarCodeAsync()
+//        {
+
+//            var plcTaskNo = await _variableService.ReadValueAsync("鎵撶爜杩涚珯PLC浠诲姟鍙�");
+
+//            if (string.IsNullOrEmpty(plcTaskNo?.Content?.Value.SafeString().ToString()))
+//            {
+
+//            }
+//            else
+//            {
+//                var myTaskNo = plcTaskNo.Content.Value.SafeString().ToString();
+//                //TODO:鏆傛椂鍏堝啓鍏� 鍐呴儴鍙橀噺
+//                Dictionary<string, object?> keyValuePairs = new Dictionary<string, object?>
+//                    {
+//                        { "鎵撶爜宸ヤ欢1", "11111111" },
+//                        { "鎵撶爜宸ヤ欢2", "22222222" },
+//                        { "鎵撶爜宸ヤ欢3", "33333333" }
+//                    };
+//                _variableService.WriteValueAsync(keyValuePairs);
+
+//                //TODO:妯℃嫙閲囬泦鍙傛暟
+//                keyValuePairs = new Dictionary<string, object?>
+//                    {
+//                        { "鎵撶爜閫熷害", 100},
+//                        { "鎵撶爜璐ㄩ噺", 2},
+//                    };
+//                var ret2 = _variableService.WriteValueAsync(keyValuePairs);
+
+//                //TODO:鏆傛椂鐢熸垚浜у搧ID
+//                //var productID = Guid.NewGuid().ToString();
+//                var productID = DateTime.Now.ToString("yyyyMMddHHmmssfff");
+//                keyValuePairs = new Dictionary<string, object?>
+//                    {
+//                        { "鎵撶爜_ProductID", productID},
+//                    };
+//                var ret = _variableService.WriteValueAsync(keyValuePairs);
+//            }
+//        }
+
+
+//        /// <summary>
+//        /// 鍒囧壊
+//        /// </summary>
+//        /// <returns></returns>
+//        private async Task HanlderForCutAsync()
+//        {
+
+//            var plcTaskNo = await _variableService.ReadValueAsync("鍒囧壊杩涚珯PLC浠诲姟鍙�");
+
+//            if (string.IsNullOrEmpty(plcTaskNo?.Content?.Value.SafeString().ToString()))
+//            {
+
+//            }
+//            else
+//            {
+//                var myTaskNo = plcTaskNo.Content.Value.SafeString().ToString();
+//                //TODO:鏆傛椂鍏堝啓鍏� 鍐呴儴鍙橀噺
+//                Dictionary<string, object?> keyValuePairs = new Dictionary<string, object?>
+//                    {
+//                        { "鍒囧壊1", "555555" },
+//                        { "鍒囧壊2", "66666" },
+//                        { "鍒囧壊3", "77777" }
+//                    };
+//                _variableService.WriteValueAsync(keyValuePairs);
+
+//                //TODO:妯℃嫙閲囬泦鍙傛暟
+//                keyValuePairs = new Dictionary<string, object?>
+//                    {
+//                        { "鍒囧壊閫熷害", 99},
+//                        { "鍒囧壊璐ㄩ噺", 1},
+//                    };
+//                var ret2 = _variableService.WriteValueAsync(keyValuePairs);
+
+//                //TODO:鏆傛椂鐢熸垚浜у搧ID
+//                //鑾峰彇涓婁竴涓伐搴忕殑浜у搧ID
+//                //鏍规嵁宸ュ簭鍚嶈幏鍙栧伐搴忓璞�
+//                var _workSectionManager = _serviceProvider.GetRequiredService<IWorkSectionManager>();
+//                var lastWorkSection = "鎵撶爜宸ュ簭";
+//                var workSection = await _workSectionManager.GetByNameAsync(lastWorkSection);
+
+//                //鑾峰彇宸ュ崟鏁版嵁锛堜粠鏈伐搴忔煡璇�3涓骇鍝侊級
+//                //璇诲彇scms_productions琛紝鏍规嵁褰撳墠鏃堕棿鏌ヨ鏈�杩�3鏉¤褰�
+//                var traceManager = _serviceProvider.GetRequiredService<ITraceProvider>();
+//                GetTracesRequest request = new GetTracesRequest()
+//                {
+//                    WorkSectionId = workSection.Id,
+//                };
+//                TraceModel traceModel = null;
+//                var list = await traceManager.GetTracesAsync(request);
+//                if (list?.Count > 0)
+//                {
+//                    //閲嶆柊鎺掑簭
+//                    list = list.OrderByDescending(x => x.FinishTime).ToList();
+//                    traceModel = list.First();
+//                }
+//                //var productID = Guid.NewGuid().ToString();
+//                var productID = DateTime.Now.ToString("yyyyMMddHHmmssfff");
+//                if (traceModel != null)
+//                {
+//                    productID = traceModel.SerialNumber;
+//                }
+//                keyValuePairs = new Dictionary<string, object?>
+//                    {
+//                        { "鍒囧壊_ProductID", productID},
+//                    };
+//                var ret = _variableService.WriteValueAsync(keyValuePairs);
+//            }
+//        }
+//    }
+//}
diff --git a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems/ProjectService/PipeLineLemsProjectService.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems/ProjectService/PipeLineLemsProjectService.cs
index 179286e..d2f6d29 100644
--- a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems/ProjectService/PipeLineLemsProjectService.cs
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems/ProjectService/PipeLineLemsProjectService.cs
@@ -19,6 +19,7 @@
 using CMS.Plugin.PipeLineLems.Application.Contracts.Services;
 using CMS.Plugin.PipeLineLems.Domain.WorkPlan;
 using CMS.Plugin.PipeLineLems.Domain.CallMaterialOrder;
+using System.Collections.Generic;
 
 namespace CMS.Plugin.PipeLineLems.ProjectService
 {
@@ -250,6 +251,16 @@
             }
             else
             {
+
+                //TODO:鏆傛椂鐢熸垚浜у搧ID
+                var productID = DateTime.Now.ToString("yyyyMMddHHmmssfff");
+                //var productID = new_workPlanList.Last().PipeSpecCode;
+                Dictionary<string, object?> keyValuePairs_productID = new Dictionary<string, object?>
+                    {
+                        { "鎵撶爜_ProductID", productID},
+                    };
+                var ret = _variableService.WriteValueAsync(keyValuePairs_productID);
+
                 var myTaskNo = plcTaskNo.Content.Value.SafeString().ToString();
                 CallMaterialOrder callMaterialOrder = null;
                 try
@@ -309,14 +320,7 @@
                     };
                     var ret2 = _variableService.WriteValueAsync(keyValuePairs);
 
-                    //TODO:鏆傛椂鐢熸垚浜у搧ID
-                    var productID = DateTime.Now.ToString("yyyyMMddHHmmssfff");
-                    //var productID = new_workPlanList.Last().PipeSpecCode;
-                    keyValuePairs = new Dictionary<string, object?>
-                    {
-                        { "鎵撶爜_ProductID", productID},
-                    };
-                    var ret = _variableService.WriteValueAsync(keyValuePairs);
+
 
 
                     uow.CompleteAsync();

--
Gitblit v1.9.3