From e41fb4bea3afa879caaf6c9f316f01bacf262545 Mon Sep 17 00:00:00 2001 From: kingno <30263@KINGNO> Date: 星期一, 23 六月 2025 20:03:12 +0800 Subject: [PATCH] S2和S4结果联动.S2抛条码NG,其余NG到S4抛料 --- src/Bro.M141.Process/M141Process_Mysql.cs | 381 ++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 353 insertions(+), 28 deletions(-) diff --git a/src/Bro.M141.Process/M141Process_Mysql.cs b/src/Bro.M141.Process/M141Process_Mysql.cs index d6b7296..59cd94f 100644 --- a/src/Bro.M141.Process/M141Process_Mysql.cs +++ b/src/Bro.M141.Process/M141Process_Mysql.cs @@ -1,5 +1,8 @@ 锘縰sing Bro.Common.Helper; +using Bro.Common.Interface; +using Bro.Common.Model; using Bro.M135.Common; +using HalconDotNet; using MySql.Data.MySqlClient; using Newtonsoft.Json; using Sunny.UI; @@ -10,6 +13,10 @@ using System.Text; using System.Threading.Tasks; using Windows.Globalization.PhoneNumberFormatting; +using Windows.Media.Ocr; +using static Bro.Common.Helper.EnumHelper; +using static NPOI.HSSF.Util.HSSFColor; +using static Org.BouncyCastle.Math.EC.ECCurve; using static System.Windows.Forms.VisualStyles.VisualStyleElement.ListView; namespace Bro.M141.Process @@ -17,9 +24,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 +34,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 +46,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 +71,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 +100,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 +114,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 +148,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) { @@ -126,45 +189,307 @@ } } - public void NewForAll(ProductModel pro, string devicestr) + public void NewForAll(ProductModel pro, string devicestr, string netname) { - 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 (string.IsNullOrEmpty(netname) /*|| devicestr != "S3" */) + { + 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(); + } + + } + } + } + else + { + List<Netdefectdetail> allnetdetail = new List<Netdefectdetail>(); + 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(); + + var defecttem = item.ResultList.SelectMany(u => u.AllNetResults.SelectMany(m => m.DetectDetails)).Where(u => u.ClassName == netname).ToList(); + + //CommonLogger.LogAsync(DateTime.Now, EnumHelper.LogLevel.Exception, $"{netname}涓暟{defecttem.Count}"); + + int num = 0; + foreach (var item1 in defecttem) + { + double x1 = item1.Rect.Point_LU.X + item1.Rect.Width / 2.0; + double y1 = item1.Rect.Point_LU.Y + item1.Rect.Height / 2.0; + num++; + //HOperatorSet.AffineTransPoint2d(new HTuple(pro.Centermatrix.ToArray()), x1, y1, out HTuple qx, out HTuple qy); + + CommonLogger.LogAsync(DateTime.Now, EnumHelper.LogLevel.Detail, $"sql {pro.SN}鍘熷潗鏍噞num} {x1},{y1}"); + HOperatorSet.ProjectiveTransPixel(new HTuple(pro.Centermatrix.ToArray()), x1, y1, out HTuple qx, out HTuple qy); + CommonLogger.LogAsync(DateTime.Now, EnumHelper.LogLevel.Detail, $"sql {pro.SN}鏂板潗鏍噞num} {qx},{qy}"); + + Netdefectdetail temc = new Netdefectdetail() + { + centerX = qx, + centerY = qy, + name = netname, + }; + allnetdetail.Add(temc); + } + } + } + + pro.Netdefectdetails = allnetdetail; + } + } + + + 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 List<Netdefectdetail> GetNetdefectdetails(string plcnum) + { + try + { + string mysqlstr = $"select data from forall where plcnum='{plcnum}' && device='S3' order by id desc limit 1"; + string str = selectmysql(mysqlstr, connStrAll); + if (string.IsNullOrEmpty(str)) + { + return null; + } + else + { + ProductModel p = null; + p = JsonConvert.DeserializeObject<ProductModel>(str, new JsonSerializerSettings() { TypeNameHandling = TypeNameHandling.All }); + return p.Netdefectdetails; + } + } + catch (Exception e) + { + CommonLogger.LogAsync(DateTime.Now, EnumHelper.LogLevel.Exception, $"鏁版嵁搴揻orlocal鑾峰彇瀵硅薄寮傚父 {e.ToString()}"); + } + return null; + } + + public bool GetS2Result(string plcnum) + { + try + { + string mysqlstr = $"select data from forall where plcnum='{plcnum}' && device='S2' order by id desc limit 1"; + string str = selectmysql(mysqlstr, connStrAll); + if (string.IsNullOrEmpty(str)) + { + return false; + } + else + { + ProductModel p = null; + p = JsonConvert.DeserializeObject<ProductModel>(str, new JsonSerializerSettings() { TypeNameHandling = TypeNameHandling.All }); + + return p.Result=="OK"; + } + } + catch (Exception e) + { + CommonLogger.LogAsync(DateTime.Now, EnumHelper.LogLevel.Exception, $"鏁版嵁搴揻orlocal鑾峰彇瀵硅薄寮傚父 {e.ToString()}"); + } + return false; + } + + + 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++) + { + string strjson = dt.Rows[i][0].ToString(); + strjson = strjson.Replace(@"\", @"\\"); + ProductModel p = JsonConvert.DeserializeObject<ProductModel>(strjson, 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; + } + + + + public DataTable getBasketCode() + { + try + { + string mysqlstr = $"select id,code,time from basketcode order by id desc limit 200"; + var dt = selectdt(mysqlstr, connStrAll); + if (dt == null) + { + return null; + } + else + { + return dt; + } + } + catch (Exception e) + { + CommonLogger.LogAsync(DateTime.Now, EnumHelper.LogLevel.Exception, $"鏁版嵁搴揻orall鏁版嵁寮傚父 {e.ToString()}"); + } + return null; + + + + } + + + public void NewBasketcode(string code) + { + try + { + string mysqlstr = $"insert into basketcode(code,time) values('{code}','{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}')"; + if (Operatoremysql(mysqlstr, connStrAll)) + { + CommonLogger.LogAsync(DateTime.Now, EnumHelper.LogLevel.Action, $"鏁版嵁搴揵asketcode鎻掑叆鏁版嵁鎴愬姛"); + } + else + { + CommonLogger.LogAsync(DateTime.Now, EnumHelper.LogLevel.Error, $"鏁版嵁搴揵asketcode鎻掑叆鏁版嵁寮傚け璐� {mysqlstr}"); + } + } + catch (Exception e) + { + CommonLogger.LogAsync(DateTime.Now, EnumHelper.LogLevel.Exception, $"鏁版嵁搴揵asketcode鎻掑叆鏁版嵁寮傚父 {e.ToString()}"); + } + } } } -- Gitblit v1.8.0