From 2ad4cf6d588bd9bc446e8bde2a916c17aec3dad6 Mon Sep 17 00:00:00 2001
From: Gokiburi <Gokiburi@DESKTOP-9ITC11L>
Date: 星期二, 17 六月 2025 11:49:48 +0800
Subject: [PATCH] 增加离线测试功能

---
 src/Bro.M141.Process/M141Process_Mysql.cs |  226 +++++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 199 insertions(+), 27 deletions(-)

diff --git a/src/Bro.M141.Process/M141Process_Mysql.cs b/src/Bro.M141.Process/M141Process_Mysql.cs
index d6b7296..00d7bee 100644
--- a/src/Bro.M141.Process/M141Process_Mysql.cs
+++ b/src/Bro.M141.Process/M141Process_Mysql.cs
@@ -1,4 +1,6 @@
 锘縰sing Bro.Common.Helper;
+using Bro.Common.Interface;
+using Bro.Common.Model;
 using Bro.M135.Common;
 using MySql.Data.MySqlClient;
 using Newtonsoft.Json;
@@ -10,6 +12,8 @@
 using System.Text;
 using System.Threading.Tasks;
 using Windows.Globalization.PhoneNumberFormatting;
+using Windows.Media.Ocr;
+using static Org.BouncyCastle.Math.EC.ECCurve;
 using static System.Windows.Forms.VisualStyles.VisualStyleElement.ListView;
 
 namespace Bro.M141.Process
@@ -17,9 +21,8 @@
     public class M141Process_Mysql
     {
 
-        string connStrAll = "server=127.0.0.1;port=3306;user id=root;password=123456;database=BroDB;charset=utf8";
-        string connStrLocal = "server=127.0.0.1;port=3306;user id=root;password=123456;database=BroDB;charset=utf8";
-
+        string connStrAll = "server=localhost;port=3306;user id=root;password=123456;database=BroDB;charset=utf8";
+        string connStrLocal = "server=localhost;port=3306;user id=root;password=123456;database=BroDB;charset=utf8";
 
 
         #region 鍩虹鎿嶄綔
@@ -28,7 +31,7 @@
             connStrAll = $"server={IP};port=3306;user id=root;password=123456;database=BroDB;charset=utf8";
         }
 
-        public void Operatoremysql(string sql, string connStr)//鎿嶄綔
+        public bool Operatoremysql(string sql, string connStr)//鎿嶄綔
         {
             MySqlConnection con = new MySqlConnection(connStr);
             try
@@ -40,12 +43,16 @@
                 con.Open();
                 MySqlCommand coon = new MySqlCommand(sql, con);
                 coon.ExecuteNonQuery();
+                con.Close();
             }
             catch (Exception e)
             {
-                CommonLogger.LogAsync(DateTime.Now, EnumHelper.LogLevel.Exception, $"鏁版嵁搴撴搷浣滃紓甯� {e.ToString()}");
+                con.Close();
+                return false;
+                //CommonLogger.LogAsync(DateTime.Now, EnumHelper.LogLevel.Exception, $"鏁版嵁搴撴搷浣滃紓甯� {sql} {e.ToString()}");
             }
-            con.Close();
+            return true;
+
         }
 
         public DataTable selectdt(string str, string connStr)//鏌ヨ琛ㄦ牸
@@ -61,12 +68,14 @@
                 con.Open();
                 MySqlDataAdapter da = new MySqlDataAdapter(str, con);
                 da.Fill(dt);
+                con.Close();
             }
             catch (Exception e)
             {
-                CommonLogger.LogAsync(DateTime.Now, EnumHelper.LogLevel.Exception, $"鏁版嵁搴撴煡璇㈠紓甯� {e.ToString()}");
+                //CommonLogger.LogAsync(DateTime.Now, EnumHelper.LogLevel.Exception, $"鏁版嵁搴撴煡璇㈠紓甯� {str} {e.ToString()}");
+                con.Close();
+                return null;
             }
-            con.Close();
             return dt;
         }
 
@@ -88,9 +97,8 @@
             }
             catch (Exception e)
             {
-                CommonLogger.LogAsync(DateTime.Now, EnumHelper.LogLevel.Exception, $"鏁版嵁搴撴煡璇㈡暟鎹紓甯� {e.ToString()}");
+                //CommonLogger.LogAsync(DateTime.Now, EnumHelper.LogLevel.Exception, $"鏁版嵁搴撴煡璇㈡暟鎹紓甯� {str}  {e.ToString()}");
             }
-
             con.Close();
             return strr;
         }
@@ -103,9 +111,29 @@
         {
             try
             {
-                string mysqlstr = $"insert into forlocal (pid,plcnum,sn,data,time) values('{pro.PID}','{pro.SEQUENCE}','{pro.SN}','{JsonConvert.SerializeObject(pro)}','{DateTime.Now.ToString("yyyyMMddHHmmss")}')";
+                //淇濈暀鏁版嵁搴撴渶鏂扮殑1000鏉℃暟鎹�
+                //string destr = "delete from forlocal where id not in (select id from (select id from forlocal order BY id desc limit 1000) as subquery)";
+                //Operatoremysql(destr, connStrAll);
 
-                Operatoremysql(mysqlstr, connStrLocal);
+                string str1 = "select id from forlocal  order by id desc limit 1";
+                string index = selectmysql(str1, connStrLocal);
+
+                if (!string.IsNullOrEmpty(index))
+                {
+                    string str2 = $"delete from forlocal where id < ({index}-1000)";
+                    Operatoremysql(str2, connStrLocal);
+                }
+
+                string mysqlstr = $"insert into forlocal (basketcode,pid,plcnum,sn,data,time) values('{pro.BasketCode}','{pro.PID}','{pro.SEQUENCE}','{pro.SN}','{JsonConvert.SerializeObject(pro, new JsonSerializerSettings() { TypeNameHandling = TypeNameHandling.All })}','{DateTime.Now.ToString("yyyyMMddHHmmss")}')";
+
+                if (Operatoremysql(mysqlstr, connStrLocal))
+                {
+                    CommonLogger.LogAsync(DateTime.Now, EnumHelper.LogLevel.Action, $"鏁版嵁搴揻orlocal鎻掑叆鏁版嵁鎴愬姛");
+                }
+                else
+                {
+                    CommonLogger.LogAsync(DateTime.Now, EnumHelper.LogLevel.Error, $"鏁版嵁搴揻orlocal鎻掑叆鏁版嵁寮傚け璐�  {mysqlstr}");
+                }
             }
             catch (Exception e)
             {
@@ -117,8 +145,40 @@
         {
             try
             {
-                string mysqlstr = $"update forlocal set data='{JsonConvert.SerializeObject(pro)}' where plcnum='{pro.SEQUENCE}'";
-                Operatoremysql(mysqlstr, connStrLocal);
+                if (pro.Details != null)
+                {
+                    foreach (var item in pro.Details)
+                    {
+                        if (item != null)
+                        {
+                            var defects = item.ResultList.GetDefectDescList();
+                            var ngSpecCodes = item.SpecList.Where(u => u.MeasureResult != true).Select(u => u.Code);
+                            defects.AddRange(ngSpecCodes);
+                            item.DefectList.AddRange(defects.Distinct());
+                        }
+                    }
+                }
+
+                JsonSerializerSettings settings = new JsonSerializerSettings
+                {
+                    TypeNameHandling = TypeNameHandling.All
+                };
+
+                string jsondata = JsonConvert.SerializeObject(pro, settings);
+
+
+                //CommonLogger.LogAsync(DateTime.Now, EnumHelper.LogLevel.Exception, $"{jsondata}");
+
+                string mysqlstr = $"update forlocal set data='{jsondata}',pid='{pro.PID}' where plcnum='{pro.SEQUENCE}'";
+
+                if (Operatoremysql(mysqlstr, connStrLocal))
+                {
+                    CommonLogger.LogAsync(DateTime.Now, EnumHelper.LogLevel.Action, $"鏁版嵁搴揻orlocal鏇存柊鏁版嵁鎴愬姛");
+                }
+                else
+                {
+                    CommonLogger.LogAsync(DateTime.Now, EnumHelper.LogLevel.Error, $"鏁版嵁搴揻orlocal鏇存柊鏁版嵁澶辫触 {mysqlstr}");
+                }
             }
             catch (Exception e)
             {
@@ -128,42 +188,154 @@
 
         public void NewForAll(ProductModel pro, string devicestr)
         {
-            try
+            Task.Run(() =>
             {
-                string mysqlstr = $"insert into forall (device,plcnum,sn,data,time) values('{devicestr}','{pro.SEQUENCE}','{pro.SN}','{JsonConvert.SerializeObject(pro)}','{DateTime.Now.ToString("yyyyMMddHHmmss")}')";
+                try
+                {
+                    //淇濈暀鏁版嵁搴撴渶鏂扮殑1000鏉℃暟鎹�
+                    //string destr = "delete from forall where id not in (select id from (select id from forall order BY id desc limit 1000) as subquery)";
+                    //Operatoremysql(destr, connStrAll);
 
-                Operatoremysql(mysqlstr, connStrAll);
-            }
-            catch (Exception e)
-            {
-                CommonLogger.LogAsync(DateTime.Now, EnumHelper.LogLevel.Exception, $"鏁版嵁搴揻orall鎻掑叆鏁版嵁寮傚父 {e.ToString()}");
-            }
+                    if (pro.Details != null)
+                    {
+                        foreach (var item in pro.Details)
+                        {
+                            if (item != null)
+                            {
+                                var defects = item.ResultList.GetDefectDescList();
+                                var ngSpecCodes = item.SpecList.Where(u => u.MeasureResult != true).Select(u => u.Code);
+                                defects.AddRange(ngSpecCodes);
+                                item.DefectList.AddRange(defects.Distinct());
+                                item.DefectList = item.DefectList.Distinct().ToList();
+                            }
+                        }
+                    }
+
+                    string strtem = "select * from forall  where plcnum='" + pro.SEQUENCE + "' and device='" + devicestr + "' ";
+
+                    var temdb = selectdt(strtem, connStrAll);
+                    if (temdb != null && temdb.Rows.Count > 0)
+                    {
+                        string mysqlstr = $"update forall set data='" + JsonConvert.SerializeObject(pro, new JsonSerializerSettings() { TypeNameHandling = TypeNameHandling.All }) + "' where plcnum='" + pro.SEQUENCE + "' and device='" + devicestr + "' ";
+
+                        if (Operatoremysql(mysqlstr, connStrAll))
+                        {
+                            CommonLogger.LogAsync(DateTime.Now, EnumHelper.LogLevel.Action, $"鏁版嵁搴揻orall鏇存柊鏁版嵁鎴愬姛");
+                        }
+                        else
+                        {
+                            CommonLogger.LogAsync(DateTime.Now, EnumHelper.LogLevel.Error, $"鏁版嵁搴揻orall鏇存柊鏁版嵁寮傚父  {mysqlstr}");
+                        }
+                    }
+                    else
+                    {
+                        string str1 = "select id from forall  order by id desc limit 1";
+                        string index = selectmysql(str1, connStrAll);
+
+                        if (!string.IsNullOrEmpty(index))
+                        {
+                            string str2 = $"delete from forall where id < ({index}-1000)";
+                            Operatoremysql(str2, connStrAll);
+                        }
+
+                        string mysqlstr = $"insert into forall (basketcode,device,plcnum,sn,data,time) values('{pro.BasketCode}','{devicestr}','{pro.SEQUENCE}','{pro.SN}','{JsonConvert.SerializeObject(pro, new JsonSerializerSettings() { TypeNameHandling = TypeNameHandling.All })}','{DateTime.Now.ToString("yyyyMMddHHmmss")}')";
+
+                        if (Operatoremysql(mysqlstr, connStrAll))
+                        {
+                            CommonLogger.LogAsync(DateTime.Now, EnumHelper.LogLevel.Action, $"鏁版嵁搴揻orall鎻掑叆鏁版嵁鎴愬姛");
+                        }
+                        else
+                        {
+                            CommonLogger.LogAsync(DateTime.Now, EnumHelper.LogLevel.Error, $"鏁版嵁搴揻orall鎻掑叆鏁版嵁寮傚け璐�  {mysqlstr}");
+                        }
+                    }
+
+                }
+                catch (Exception e)
+                {
+                    CommonLogger.LogAsync(DateTime.Now, EnumHelper.LogLevel.Exception, $"鏁版嵁搴揻orall鎻掑叆鏁版嵁寮傚父 {e.ToString()}");
+                }
+            });
         }
-
 
         public ProductModel GetProduct(string plcnum)
         {
             try
             {
-                string mysqlstr = $"select data from forlocal where plcnum='{plcnum}'";
-                string str= selectmysql(mysqlstr, connStrLocal);
+                string mysqlstr = $"select data from forlocal where plcnum='{plcnum}' order by id desc limit 1";
+                string str = selectmysql(mysqlstr, connStrLocal);
                 if (string.IsNullOrEmpty(str))
                 {
                     return null;
                 }
                 else
                 {
-                    ProductModel p = JsonConvert.DeserializeObject<ProductModel>(str);
+                    ProductModel p = null;
+                    p = JsonConvert.DeserializeObject<ProductModel>(str, new JsonSerializerSettings() { TypeNameHandling = TypeNameHandling.All });
                     return p;
                 }
             }
             catch (Exception e)
             {
-                CommonLogger.LogAsync(DateTime.Now, EnumHelper.LogLevel.Exception, $"鏁版嵁搴揻orlocal鏇存柊鏁版嵁寮傚父 {e.ToString()}");
+                CommonLogger.LogAsync(DateTime.Now, EnumHelper.LogLevel.Exception, $"鏁版嵁搴揻orlocal鑾峰彇瀵硅薄寮傚父 {e.ToString()}");
             }
             return null;
         }
 
+        public string Getbasketcode(string plcnum, out string sn)
+        {
+            sn = "Noread";
+            try
+            {
+                string mysqlstr = $"select basketcode,sn from forall where plcnum='{plcnum}' && device='S2' order by id desc limit 1";
+                var dt = selectdt(mysqlstr, connStrAll);
+                if (dt == null || dt.Rows.Count == 0)
+                {
+                    return "Noread";
+                }
+                else
+                {
+                    sn = dt.Rows[0][1].ToString();
+                    return dt.Rows[0][0].ToString();
+                }
+            }
+            catch (Exception e)
+            {
+
+            }
+            return "NoRead";
+        }
+
+
+        public List<ProductModel> GetProductList(string plcnum)
+        {
+            try
+            {
+                string mysqlstr = $"select data from forall where plcnum='{plcnum}' order by device";
+                var dt = selectdt(mysqlstr, connStrAll);
+                if (dt == null)
+                {
+                    return null;
+                }
+                else
+                {
+                    List<ProductModel> plist = new List<ProductModel>();
+                    for (int i = 0; i < dt.Rows.Count; i++)
+                    {
+                        ProductModel p = JsonConvert.DeserializeObject<ProductModel>(dt.Rows[i][0].ToString(), new JsonSerializerSettings() { TypeNameHandling = TypeNameHandling.All });
+
+                        //JsonConvert.DeserializeObject<IProcessConfig>(_configBackupStr, new JsonSerializerSettings() { TypeNameHandling = TypeNameHandling.All });
+                        plist.Add(p);
+                    }
+                    return plist;
+                }
+            }
+            catch (Exception e)
+            {
+                CommonLogger.LogAsync(DateTime.Now, EnumHelper.LogLevel.Exception, $"鏁版嵁搴揻orall鏁版嵁寮傚父 {e.ToString()}");
+            }
+            return null;
+        }
 
 
     }

--
Gitblit v1.8.0