From 3a471ae651b228231bebb3a2d438baa1d4ac0261 Mon Sep 17 00:00:00 2001
From: alielie <alielie@git.com>
Date: 星期五, 21 十一月 2025 08:57:52 +0800
Subject: [PATCH] 优化

---
 Plugin.TestResult/SingleCell.xaml.cs |  264 ++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 252 insertions(+), 12 deletions(-)

diff --git a/Plugin.TestResult/SingleCell.xaml.cs b/Plugin.TestResult/SingleCell.xaml.cs
index 3886457..bf88c56 100644
--- a/Plugin.TestResult/SingleCell.xaml.cs
+++ b/Plugin.TestResult/SingleCell.xaml.cs
@@ -1,4 +1,7 @@
-锘縰sing HMI.Util;
+锘縰sing HMI.Core.Manager;
+using HMI.Core.Util;
+using HMI.UI.Util;
+using HMI.Util;
 using Plugin.TestResult_WPF.Constant;
 using Plugin.TestResult_WPF.Model;
 using System;
@@ -38,31 +41,61 @@
         private InfoWindow window;
         private int maxSize;
 
+        private static string dataLogPath;
+        private static int ProbeWarn;
+
+        static SingleCell()
+        {
+            try
+            {
+                var value = ParameterManager.GetCommonParameterByName("TS_DataLogPath");
+                dataLogPath = value?.Value ?? Path.Combine(PathHelper.ConfigFolder, "DataBoard");
+            }
+            catch
+            {
+                dataLogPath = Path.Combine(PathHelper.ConfigFolder, "DataBoard");
+            }
+
+            try
+            {
+                var value = ParameterManager.GetCommonParameterByName("ProbeWarn");
+                ProbeWarn = value != null ? int.Parse(value.Value) : 1000;
+            }
+            catch
+            {
+                ProbeWarn = 1000;
+            }
+        }
+
         public SingleCell()
         {
             DataContext = this;
             InitializeComponent();
         }
 
-        public SingleCell(string parentName, int index, int maxSize, string iniFile)
+        private DataTable table;
+
+        public SingleCell(DataTable table, string title, int index, int maxSize, string iniFile)
         {
-            this.parentName = parentName;
+            this.table = table;
+            this.title = title;
             this.index = index;
             this.maxSize = maxSize;
             this.countIniPath = iniFile;
+            this.probeWarn = ProbeWarn;
             DataContext = this;
             InitializeComponent();
             LoadProbeCount();
         }
 
-        private string _parentName;
-        public string parentName
+        private string _sn;
+        public string sn
         {
-            get { return _parentName; }
+            get { return _sn; }
             set
             {
-                RaiseAndSetIfchanged(ref _parentName, value);
-                RaisePropertyChanged("title");
+                RaiseAndSetIfchanged(ref _sn, value);
+                RaisePropertyChanged("sn");
             }
         }
 
@@ -78,7 +111,36 @@
             }
         }
 
-        public string title => $"{parentName}{index + 1}";
+        private bool cellIsDisabled;
+
+        public bool CellIsDisabled
+        {
+            get { return cellIsDisabled; }
+            set
+            {
+                RaiseAndSetIfchanged(ref cellIsDisabled, value);
+            }
+        }
+
+        private string _title;
+        public string title
+        {
+            get => _title;
+            set
+            {
+                RaiseAndSetIfchanged(ref _title, value);
+            }
+        }
+
+        private int _probeWarn;
+        public int probeWarn
+        {
+            get => _probeWarn;
+            set
+            {
+                RaiseAndSetIfchanged(ref _probeWarn, value);
+            }
+        }
 
         private string _status = CommonStatus.WAITING;
 
@@ -106,6 +168,8 @@
 
         private ConcurrentQueue<Info> queue = new ConcurrentQueue<Info>();
 
+        private List<Info> allInfos = new List<Info>();
+
         private ObservableCollection<Info> _infos = new ObservableCollection<Info>();
 
         public ObservableCollection<Info> infos
@@ -129,6 +193,17 @@
             set
             {
                 RaiseAndSetIfchanged(ref probeCount, value);
+                probeAlarm = value >= probeWarn;
+            }
+        }
+
+        private bool _probeAlarm;
+        public bool probeAlarm
+        {
+            get => _probeAlarm;
+            set
+            {
+                RaiseAndSetIfchanged(ref _probeAlarm, value);
             }
         }
 
@@ -153,7 +228,7 @@
         {
             if (window == null)
             {
-                window = new InfoWindow(title, infos, electricChart, ProbeCount);
+                window = new InfoWindow(title, infos, electricChart, vChart, ProbeCount);
                 window.Closed += Window_Closed;
                 window.ClearProbeCountEvent += Window_ClearProbeCountEvent;
                 window.Owner = Window.GetWindow(this);
@@ -177,8 +252,9 @@
 
         public void SetStatus(string status)
         {
+            var oldStatus = this.status;
             this.status = status;
-            if (status == "testing")
+            if (oldStatus != "testing" && status == "testing")
             {
                 UpdateProbeCount(ProbeCount + 1);
             }
@@ -186,6 +262,7 @@
 
         public void SetInfos(Info info)
         {
+            allInfos.Add(info);
             if (queue.Count >= maxSize)
             {
                 queue.TryDequeue(out var first);
@@ -216,13 +293,18 @@
 
         public void ClearInfo()
         {
+            allInfos.Clear();
             queue = new ConcurrentQueue<Info>();
             var list = new ObservableCollection<Info>(queue);
             this.infos = list;
             if (window != null) window.UpdateSource(this.infos);
         }
 
-        private Chart electricChart = new Chart("鐢垫祦鏇茬嚎(A)", false, 20);
+        private Chart electricChart = new Chart("鐢垫祦鏇茬嚎(A)", false, 20)
+        {
+            Height = 150
+        };
+
         public void AddElectricData(double data)
         {
             electricChart.AddData(data);
@@ -231,6 +313,21 @@
         public void ClearElectricData()
         {
             electricChart.Clear();
+        }
+
+        private Chart vChart = new Chart("鐢靛帇鏇茬嚎(V)", false, 20)
+        {
+            Height = 150
+        };
+
+        public void AddVData(double data)
+        {
+            vChart.AddData(data);
+        }
+
+        public void ClearVData()
+        {
+            vChart.Clear();
         }
 
         public void SaveElectricDataToCSV(string filePath)
@@ -264,5 +361,148 @@
                 Console.WriteLine(ex.ToString());
             }
         }
+
+        public void SaveVDataToCSV(string filePath)
+        {
+            try
+            {
+                List<double> datas = vChart?.GetSingleData();
+
+                FileInfo fi = new FileInfo(filePath);
+                if (!fi.Directory.Exists)
+                {
+                    fi.Directory.Create();  //鏂囦欢涓嶅瓨鍦紝鍒涘缓鏂囦欢
+                }
+
+                using (FileStream fs = new FileStream(filePath, FileMode.Create, FileAccess.Write))
+                using (StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.UTF8))
+                {
+                    string title = "鐢靛帇鏁版嵁(V)";
+                    sw.WriteLine(title);
+                    if (datas != null)
+                    {
+                        for (int i = 0; i < datas.Count; i++)
+                        {
+                            sw.WriteLine(datas[i].ToString());
+                        }
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                Console.WriteLine(ex.ToString());
+            }
+        }
+
+        /// <summary>
+        /// 淇濆瓨娴嬭瘯鏁版嵁鍒癈SV
+        /// </summary>
+        /// <param name="filePath"></param>
+        public void SaveInfoToCSV(string filePath)
+        {
+            try
+            {
+                FileInfo fi = new FileInfo(filePath);
+                if (!fi.Directory.Exists)
+                {
+                    fi.Directory.Create();  //鏂囦欢涓嶅瓨鍦紝鍒涘缓鏂囦欢
+                }
+
+                using (FileStream fs = new FileStream(filePath, FileMode.Create, FileAccess.Write))
+                using (StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.UTF8))
+                {
+                    string title = "娴嬭瘯椤�,娴嬭瘯鍊�,涓嬮檺,涓婇檺,鍗曚綅,缁撴灉,娴嬭瘯鏃堕棿";
+                    sw.WriteLine(title);
+                    foreach (var info in allInfos)
+                    {
+                        string row = $"{info.step},{info.value},{info.limitDown},{info.limitUp},{info.unit},{info.result},{info.updateTime}";
+                        sw.WriteLine(row);
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                ViewControl.Logger.Error($"Cell[{title}] SaveInfoToCSV Error.", ex);
+            }
+        }
+
+        private SqliteHelper CheckSqlHelper()
+        {
+            string today = DateTime.Now.ToString("yyyyMMdd");
+            string dbPath = Path.Combine(dataLogPath, $"Data_{today}.db");
+            if (!File.Exists(dbPath))
+            {
+                SqliteHelper.CreateDatabase(dbPath);
+            }
+            var sqliteHelper = new SqliteHelper(dbPath);
+            sqliteHelper.ExecuteSql(@"CREATE TABLE IF NOT EXISTS serialData (
+                    id INTEGER PRIMARY KEY AUTOINCREMENT,
+                    sn TEXT NOT NULL,
+                    model TEXT,
+                    station TEXT NOT NULL,
+                    step TEXT NOT NULL,
+                    position TEXT,
+                    limitDown TEXT,
+                    limitUp TEXT,
+                    unit TEXT,
+                    offset TEXT,
+                    value TEXT,
+                    status TEXT,
+                    finalStatus TEXT,
+                    consumeTime TEXT, 
+                    totalConsumeTime TEXT, 
+                    time DATETIME NOT NULL);");
+            sqliteHelper.ExecuteSql(@"CREATE TABLE IF NOT EXISTS testResult (
+                    id INTEGER PRIMARY KEY AUTOINCREMENT,
+                    sn TEXT NOT NULL,
+                    model TEXT,
+                    station TEXT NOT NULL,
+                    position TEXT,
+                    status TEXT,
+                    result TEXT NOT NULL, 
+                    time DATETIME NOT NULL);");
+            return sqliteHelper;
+        }
+
+        /// <summary>
+        /// 淇濆瓨娴嬭瘯鏁版嵁鍒癝qlite
+        /// </summary>
+        /// <param name="filePath"></param>
+        public void SaveInfoToDB()
+        {
+            try
+            {
+                using (var helper = CheckSqlHelper())
+                {
+                    List<string> sqls = new List<string>();
+                    var timestr = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+                    foreach (var info in allInfos)
+                    {
+                        string sql = $@"INSERT INTO serialData (sn,station,step,limitDown,limitUp,unit,value,status,finalStatus,time) 
+VALUES ('{sn}','','{info.step}','{info.limitDown}','{info.limitUp}','{info.unit}','{info.value}','{info.result}','{this.status}','{timestr}');";
+                        sqls.Add(sql);
+                    }
+                    sqls.Add($"INSERT INTO testResult (sn,station,position,result,time) VALUES ('{sn}','','{title}','{this.status}','{timestr}');");
+                    helper.ExecuteBatchSql(sqls);
+                }
+            }
+            catch (Exception ex)
+            {
+                ViewControl.Logger.Error($"Cell[{title}] SaveToDB Error.", ex);
+            }
+        }
+
+        private void MenuItem_Click(object sender, RoutedEventArgs e)
+        {
+            var item = sender as MenuItem;
+            switch (item?.Name)
+            {
+                case "clearSNRItem":
+                    table.TryClearCellSN(this.index);
+                    break;
+                default:
+                    break;
+            }
+        }
     }
 }

--
Gitblit v1.9.1