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/DataTable.xaml.cs |  252 ++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 221 insertions(+), 31 deletions(-)

diff --git a/Plugin.TestResult/DataTable.xaml.cs b/Plugin.TestResult/DataTable.xaml.cs
index 54364f4..71069df 100644
--- a/Plugin.TestResult/DataTable.xaml.cs
+++ b/Plugin.TestResult/DataTable.xaml.cs
@@ -2,15 +2,19 @@
 using HMI.UI.Util;
 using HMI.Util;
 using Plugin.TestResult;
+using Plugin.TestResult.Util;
 using Plugin.TestResult_WPF.Model;
 using Plugin.TestResult_WPF.Util;
+using SuperSocket.SocketBase.Config;
 using SuperSocket.SocketBase.Protocol;
 using System;
-using System.CodeDom.Compiler;
 using System.Collections.Generic;
 using System.ComponentModel;
 using System.IO;
+using System.Net.WebSockets;
 using System.Runtime.CompilerServices;
+using System.Threading.Tasks;
+using System.Timers;
 using System.Windows;
 using System.Windows.Controls;
 
@@ -52,6 +56,14 @@
             set => RaiseAndSetIfchanged(ref _statusText, value);
         }
 
+        private bool _isTesting;
+
+        public bool IsTesting
+        {
+            get { return _isTesting; }
+            set => RaiseAndSetIfchanged(ref _isTesting, value);
+        }
+
         private string tcpServerStatus;
 
         public string TcpServerStatus
@@ -68,7 +80,7 @@
             set { RaiseAndSetIfchanged(ref tcpServerInfo, value); }
         }
 
-        private static CommonCodeParser codeParser = new CommonCodeParser();
+        private static ICodeParser codeParser;
         private readonly int index;
         private readonly int cellCount;
         private readonly string chartTitle;
@@ -81,6 +93,10 @@
 
         private TcpServer tcpServer;
         private string CountIniPath;
+
+        private DateTime? testStartTime;
+
+        private Timer testTimeTimer;
 
         // 骞冲潎娓╁害
         public List<double> tempratures = new List<double>();
@@ -113,11 +129,38 @@
 
             for (int i = 0; i < this.cellCount; i++)
             {
-                var cell = new SingleCell(title, i, config.CellListMaxSize, countIniPath);
+                var cellRow = (i / config.PositionColumn) + 1;
+                var cellCol = (i % config.PositionColumn) + 1;
+                var cellTitle = $"{title}-{cellRow}-{cellCol}";
+
+                var cell = new SingleCell(this, cellTitle, i, config.CellListMaxSize, countIniPath);
                 mainGrid.Children.Add(cell);
                 cells[i] = cell;
             }
+
+            if (config.CodeParserType == "JK01")
+            {
+                codeParser = new JKCodeParser();
+            }
+            else
+            {
+                codeParser = new CommonCodeParser();
+            }
             ReadCount();
+            testTimeTimer = new Timer();
+            testTimeTimer.Interval = 10000;
+            testTimeTimer.AutoReset = true;
+            testTimeTimer.Elapsed += TestTimeTimer_Elapsed;
+        }
+
+        private void TestTimeTimer_Elapsed(object sender, ElapsedEventArgs e)
+        {
+            if (testStartTime == null) return;
+            var now = DateTime.Now;
+            Dispatcher.BeginInvoke(new Action(() =>
+            {
+                SetConsumeTime((now - testStartTime).Value.TotalSeconds);
+            }));
         }
 
         public int GetSize()
@@ -160,7 +203,42 @@
 
         public void SetStatus(string status)
         {
-            infoTable.status = status;
+            ViewControl.Logger.Debug($"In Status: {status}");
+            Dispatcher.BeginInvoke(new Action(() =>
+            {
+                var lastStatus = infoTable.status;
+                if (status == "preCheck")
+                {
+                    ViewControl.Logger.Debug($"In preCheck");
+                    IsTesting = true;
+                    return;
+                }
+                if (status == "stop")
+                {
+                    IsTesting = false;
+                    return;
+                }
+                if (status == "abort")
+                {
+                    IsTesting = false;
+                }
+                infoTable.status = status;
+
+                if (lastStatus != "testing" && status == "testing")
+                {
+                    testStartTime = DateTime.Now;
+                    SetStartTime(testStartTime?.ToString("yyyy-MM-dd HH:mm:ss"));
+                    testTimeTimer.Start();
+                }
+                if (lastStatus == "testing" && status != "testing")
+                {
+                    testTimeTimer.Stop();
+                    var now = DateTime.Now;
+                    SetConsumeTime((now - testStartTime).Value.TotalSeconds);
+                    SetEndTime(now.ToString("yyyy-MM-dd HH:mm:ss"));
+                    testStartTime = null;
+                }
+            }));
         }
 
         public void SetOkCount(int count)
@@ -216,26 +294,56 @@
 
         private void SetStationGlobal_Click(object sender, RoutedEventArgs e)
         {
-            ClearChartData();
-            parent.SetStartFlag(this.index, true);
+
+        }
+
+        private void StartSingleClick(object sender, RoutedEventArgs e)
+        {
+            if (IsTesting)
+            {
+                if (MsgBoxHelper2.WarnChoose($"纭疄鍋滄鑰佸寲鐐塠{title}]鐨勬祴璇曞悧") == MessageBoxResult.OK)
+                {
+                    parent.SetStartFlag(this.index, false);
+                }
+            }
+            else
+            {
+                ClearChartData();
+                parent.SetStartFlag(this.index, true);
+            }
         }
 
         private void ScanWindow_Click(object sender, RoutedEventArgs e)
         {
+            if (!parent.IsRunning)
+            {
+                MsgBoxHelper.WarnMessage(this, "璇峰厛鐐瑰嚮鍙充晶鍚姩鎸夐挳鍚姩娴嬭瘯绋嬪簭锛�", null, MessageBoxButton.OK);
+                return;
+            }
+
             if (scanner != null)
             {
-                scanner.Activate();
+                scanner.ShowDialog();
             }
             else
             {
                 scanner = new Scanner(this.lang("Tr.ScanTitle", title))
                 {
+                    Owner = Window.GetWindow(this),
                     Tag = title
                 };
                 scanner.FinishBarcode += Scanner_FinishBarcode;
+                scanner.ComplateClick += Scanner_ComplateClick; ;
                 scanner.Closed += Scanner_Closed;
-                scanner.Show();
+                scanner.ShowDialog();
             }
+        }
+
+        private void Scanner_ComplateClick(object sender, RoutedEventArgs e)
+        {
+            string paramName = $"StationState.Scanner[{index}]";
+            parent.engine.Globals.SetValBoolean(paramName, 1, true);
+            //parent.engine.CommitGlobalsToDisk(promptOnSaveConflicts: false);
         }
 
         private void Scanner_Closed(object sender, EventArgs e)
@@ -246,24 +354,50 @@
         private void Scanner_FinishBarcode(object sender, BarcodeEventArg e)
         {
             if (parent.SequenceContext == null) return;
-            CellInfo cellInfo = codeParser.GetCellInfoByCode(e.positionCode);
 
-            string paramName = $"StationState.StartScanner_{title}";
-            parent.engine.Globals.SetValBoolean(paramName, 0, true);
+            CellInfo cellInfo = codeParser.GetCellInfoByCode(e.positionCode);
             string positionCode = e.positionCode, snrCode = e.snrCode;
-            //TODO 闇�瑕佸鍔犳潯鐮佹牎楠屽姛鑳�
 
             //灏嗚鍒扮殑鏉$爜鍐欏叆鍒癝N涓�
-            int dutNo = Convert.ToInt16(positionCode.Split('-')[2]) - 1;
-            dutNo = this.index * this.cellCount + dutNo;
+            int dutNo = this.index * this.cellCount + cellInfo.Index;
 
             string LookupStr = $"StationState.SN[{dutNo}]";
-            ViewControl.Logger.Info($"PositionCode: [{e.positionCode}], SNR: [{e.snrCode}], LookUpStr: [{LookupStr}]");
 
-            parent.engine.Globals.SetValString(LookupStr, 0, snrCode);
+            ViewControl.Logger.Debug($"PositionCode: [{e.positionCode}], SNR: [{e.snrCode}], LookUpStr: [{LookupStr}]");
+            ViewControl.Logger.Debug($"OvenName: [{cellInfo.OvenName}], CellIndex: [{cellInfo.Index}]");
+            var cell = parent.nameTables[cellInfo.OvenName].GetSingleCell(cellInfo.Index);
+            if (snrCode == null)
+            {
+                string oldLookUp = $"StationState.SN[{e.oldIndex}]";
+                var oldCellInfo = codeParser.GetCellInfoByCode(e.oldPosition);
+                var oldCell = parent.nameTables[oldCellInfo.OvenName].GetSingleCell(oldCellInfo.Index);
+                if (oldCell.status != "hadCode")
+                {
+                    throw new Exception($"绌翠綅[{e.oldPosition}]褰撳墠涓嶅厑璁告竻闄ゆ潯鐮�!");
+                }
+                // 绉婚櫎鏉$爜
+                parent.engine.Globals.SetValString(oldLookUp, 1, "");
+                parent.engine.CommitGlobalsToDisk(promptOnSaveConflicts: false);
+
+                oldCell.SetStatus("waiting");
+                oldCell.sn = "";
+                return;
+            }
+
+            /// 娓呮帀涓婁釜鏉$爜鐨勮褰�
+            var lastSn = cell.sn;
+            if (!string.IsNullOrEmpty(lastSn))
+            {
+                Scanner.RemoveSNR(lastSn);
+            }
+
+            // 鍐欏叆鏉$爜
+            parent.engine.Globals.SetValString(LookupStr, 1, snrCode);
             parent.engine.CommitGlobalsToDisk(promptOnSaveConflicts: false);
-            string code = parent.engine.Globals.GetValString(LookupStr, 0);
+
             parent.nameTables[cellInfo.OvenName].GetSingleCell(cellInfo.Index).SetStatus("hadCode");
+            parent.nameTables[cellInfo.OvenName].GetSingleCell(cellInfo.Index).sn = snrCode;
+            Scanner.InsertNewCode(snrCode, positionCode, dutNo);
         }
 
 
@@ -284,13 +418,18 @@
         /// </summary>
         private void StartTcpServer()
         {
+            var serverConfig = new ServerConfig()
+            {
+                MaxRequestLength = 1024 * 1024,
+                Port = config.PortStart + index
+            };
             try
             {
                 if (tcpServer == null)
                 {
                     tcpServer = new TcpServer();
                     tcpServer.NewRequestReceived += TcpServer_NewRequestReceived;
-                    if (!tcpServer.Setup(config.PortStart + index))
+                    if (!tcpServer.Setup(serverConfig))
                     {
                         ChangeTcpServerStatus("ERROR", this.lang("Tr.TcpServer.SettingFailed"));
                         return;
@@ -304,7 +443,7 @@
                 }
                 else if (tcpServer.State != SuperSocket.SocketBase.ServerState.Running)
                 {
-                    if (!tcpServer.Setup(config.PortStart + index))
+                    if (!tcpServer.Setup(serverConfig))
                     {
                         ChangeTcpServerStatus("ERROR", this.lang("Tr.TcpServer.SettingFailed"));
                         return;
@@ -360,6 +499,7 @@
         /// </summary>
         public void RelaseResource()
         {
+            testTimeTimer?.Stop();
             StopTcpServer();
         }
 
@@ -371,7 +511,7 @@
         private void TcpServer_NewRequestReceived(TcpSession session, StringRequestInfo requestInfo)
         {
             string msg = requestInfo.Body;
-            ViewControl.Logger.Info($"TCP Data From {session.RemoteEndPoint}: {msg}.");
+            ViewControl.Logger.Debug($"TCP Data From {session.RemoteEndPoint}: {msg}.");
             string[] datas_10015 = msg.Split(';');
             int cellIndex = int.Parse(datas_10015[1]);
 
@@ -384,10 +524,11 @@
             {
                 step = values[0],
                 value = values[1],
-                result = values[2],
-                range = values[3],
-                condition = values[4],
-                updateTime = values[5]
+                limitUp = values[2],
+                limitDown = values[3],
+                unit = values[4],
+                result = values[5],
+                updateTime = values[6]
             });
             //session.Send("1");
         }
@@ -513,6 +654,14 @@
             }
         }
 
+        public void ClearVData()
+        {
+            foreach (var cell in cells)
+            {
+                cell.ClearVData();
+            }
+        }
+
         private void Button_Click_1(object sender, RoutedEventArgs e)
         {
             ScannerSetting setting = new ScannerSetting()
@@ -524,17 +673,18 @@
 
         private void ClearAllSnr_Click(object sender, RoutedEventArgs e)
         {
+            var str = $"StationState.DoorClose[{index}]";
+            if (parent.engine.Globals.GetValBoolean(str, 0) == true)
+            {
+                MsgBoxHelper.Error(Window.GetWindow(this), "绋嬪簭杩愯涓紝涓嶈兘娓呯┖鏉$爜");
+                return;
+            }
+
             if (MsgBoxHelper.WarnMessage(Window.GetWindow(this), LangUtil.Get("Tr.MakeSureClearAllSNR")) == MessageBoxResult.OK)
             {
                 try
                 {
-                    for (int i = 0; i < this.cellCount; i++)
-                    {
-                        int dutNo = this.index * this.cellCount + i;
-                        string LookupStr = $"StationState.SN[{dutNo}]";
-                        parent.engine.Globals.SetValString(LookupStr, 0, "");
-                        GetSingleCell(i).SetStatus("waiting");
-                    }
+                    ClearAllSN();
                     ToastHelper.Success(LangUtil.Get("App.DeleteSuccess"));
                 }
                 catch (Exception ex)
@@ -544,5 +694,45 @@
                 }
             }
         }
+
+        public void ClearAllSN()
+        {
+            for (int i = 0; i < this.cellCount; i++)
+            {
+                ClearCellSN(i);
+            }
+        }
+
+        public void TryClearCellSN(int cellIndex)
+        {
+            var str = $"StationState.DoorClose[{this.index}]";
+            if (parent.engine.Globals.GetValBoolean(str, 0) == true)
+            {
+                MsgBoxHelper.Error(Window.GetWindow(this), "绋嬪簭杩愯涓紝涓嶈兘娓呯┖鏉$爜");
+                return;
+            }
+            ClearCellSN(cellIndex);
+        }
+
+        private void ClearCellSN(int index)
+        {
+            var cell = GetSingleCell(index);
+            int dutNo = this.index * this.cellCount + index;
+            string LookupStr = $"StationState.SN[{dutNo}]";
+            var lastSN = cell.sn;
+            cell.sn = "";
+            cell.SetStatus("waiting");
+            parent.engine.Globals.SetValString(LookupStr, 1, "");
+            parent.engine.CommitGlobalsToDisk(promptOnSaveConflicts: false);
+            if (!string.IsNullOrEmpty(lastSN)) Scanner.RemoveSNR(lastSN);
+        }
+
+        private void Button_Click_2(object sender, RoutedEventArgs e)
+        {
+            if (MsgBoxHelper.WarnMessage(Window.GetWindow(this), "纭畾瑕佸仠姝㈣鐐変綅鐨勮�佸寲娴嬭瘯鍚楋紵") == MessageBoxResult.OK)
+            {
+                parent.SetStartFlag(this.index, false);
+            }
+        }
     }
 }

--
Gitblit v1.9.1