chr
2024-10-09 1f645778ae80a3a8801b8bb4d0fcf8feb244ad43
PdmSwPlugin.PDM/PdmControl.xaml.cs
@@ -36,6 +36,9 @@
using PdmSwPlugin.Commmon.Control;
using PdmSwPlugin.Common.Entity.System;
using System.Windows.Documents;
using System.Windows.Input;
using NPOI.POIFS.Properties;
using NPOI.POIFS.Crypt;
namespace PdmSwPlugin.PDM
{
@@ -1093,6 +1096,128 @@
            return allSuccess;
        }
        public void sb(dynamic[] datas) {
            /*Dictionary<string, DrawInfo> properties = datas[0];
            string key = datas[1];
            KeyValuePair<string, DrawInfo> property = datas[2];
            List<string> temp = datas[3];
            CountdownEvent counter = datas[4];
            try
            {
                int iii, ref bool allSuccess
                Logger.Info($"{key} checking rule...");
                iii++;
                Result<DrawInfo> result = Client.PostSyncAction<DrawInfo>(property.Value, "wpf/bom/openApi/checkRuleSingle");
                DrawInfo checkResult = result.HandleResult();
                properties[key].checkRuleResult = checkResult.checkRuleResult;
                properties[key].errMessages = checkResult.errMessages;
                var msgs = checkResult.errMessages;
                if (!properties[key].HistoryData && !checkResult.checkRuleOk)
                {
                    allSuccess = false;
                }
                if (!properties[key].HistoryData && msgs != null && msgs.Count > 0)
                {
                    lock (temp)
                    {
                        foreach (string msg in msgs)
                        {
                            temp.Add($"物料【{key}】未通过规则检查!{msg}");
                        }
                    }
                }
                MaskAdorner.ShowMessage(content, $"物料【{key}】检查完成");
            }
            catch (Exception ex)
            {
                properties[key].checkRuleResult = 2;
                properties[key].errMessages = new List<string> { "发起检查失败,请重试" };
                lock (temp)
                {
                    temp.Add($"物料【{key}】发起检查失败,请重试");
                }
                allSuccess = false;
                MaskAdorner.ShowMessage(content, $"物料【{key}】检查完成");
            }
            finally
            {
                counter.Signal();
            }*/
        }
        public bool DoCheckRuleAsync(out List<string> messages)
        {
            var temp = new List<string>();
            bool allSuccess = true;
            Dictionary<string, DrawInfo> properties = GetAllProperties(temp);
            MaskAdorner.ShowMessage(content, "正在请求数据...");
            var factory = LimitedConcurrencyLevelTaskScheduler.Factory;
            CountdownEvent counter = new CountdownEvent(properties.Count);
            int iii = 1;
            foreach (KeyValuePair<string, DrawInfo> property in properties)
            {
                string key = property.Key;
                _ = ThreadPool.QueueUserWorkItem(
                (WaitCallback)delegate
                {
                    try
                    {
                        Logger.Error($"{key} checking rule...");
                        iii++;
                        Result<DrawInfo> result = Client.PostSyncAction<DrawInfo>(property.Value, "wpf/bom/openApi/checkRuleSingle");
                        DrawInfo checkResult = result.HandleResult();
                        properties[key].checkRuleResult = checkResult.checkRuleResult;
                        properties[key].errMessages = checkResult.errMessages;
                        var msgs = checkResult.errMessages;
                        if (!properties[key].HistoryData && !checkResult.checkRuleOk)
                        {
                            allSuccess = false;
                        }
                        if (!properties[key].HistoryData && msgs != null && msgs.Count > 0)
                        {
                            lock (temp)
                            {
                                foreach (string msg in msgs)
                                {
                                    temp.Add($"物料【{key}】未通过规则检查!{msg}");
                                }
                            }
                        }
                        MaskAdorner.ShowMessage(content, $"物料【{key}】检查完成");
                    }
                    catch (Exception ex)
                    {
                        properties[key].checkRuleResult = 2;
                        properties[key].errMessages = new List<string> { "发起检查失败,请重试" };
                        lock (temp)
                        {
                            temp.Add($"物料【{key}】发起检查失败,请重试");
                        }
                        allSuccess = false;
                        MaskAdorner.ShowMessage(content, $"物料【{key}】检查完成");
                    }
                    finally
                    {
                        counter.Signal();
                    }
                });
                /* factory.StartNew(() =>
                 {
                 });*/
            }
            counter.Wait();
            counter.Dispose();
            messages = temp;
            return allSuccess;
        }
        private void ShowExWindow(MultiExWindow exWin)
        {
            IntPtr winformWindow = Process.GetCurrentProcess().MainWindowHandle;
@@ -1688,6 +1813,10 @@
                    {
                        // 执行规则检查并获取结果
                        RefreshBomList(SwApp.IActiveDoc2);
                        if (model.bomTreeReader.CacheList.Count <= 0)
                        {
                            throw new CantCheckInException(new List<string> { "请打开一张图纸" });
                        }
                        DoCheckRule(out _);
                        // 筛选所有在物料明细表中,不跳过检查并且检查未通过的,类型是加工件的未通过审核的,加工件审核通过的但图纸变更的
                        List<string> errs = model.bomTreeReader.CacheList.Select(b => b.NeedStopCheckIn())