kingno
5 天以前 e41fb4bea3afa879caaf6c9f316f01bacf262545
src/Bro.M141.Process/M141Process_Mysql.cs
@@ -2,6 +2,7 @@
using Bro.Common.Interface;
using Bro.Common.Model;
using Bro.M135.Common;
using HalconDotNet;
using MySql.Data.MySqlClient;
using Newtonsoft.Json;
using Sunny.UI;
@@ -12,6 +13,9 @@
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;
@@ -22,7 +26,6 @@
        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 基础操作
@@ -145,33 +148,19 @@
        {
            try
            {
                if (pro.Details!=null)
                if (pro.Details != null)
                {
                    foreach (var item in pro.Details)
                    {
                        if (item.ResultList!=null)
                        if (item != null)
                        {
                            item.ResultList.ForEach(u =>
                            {
                                if (u.NetResults != null)
                                {
                                    u.NetResults.ForEach(x =>
                                    {
                                        if (x.DetectDetails != null)
                                        {
                                            var distinctItems = x.DetectDetails.GroupBy(i => new { i.ClassName, i.FinalResult }) // 根据Id和Name去重
                             .Select(g => g.First()) // 选择每个组的第一个元素
                             .ToList();
                                            x.DetectDetails = distinctItems;
                                        }
                                    });
                                }
                            });
                            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
                {
@@ -183,7 +172,7 @@
                //CommonLogger.LogAsync(DateTime.Now, EnumHelper.LogLevel.Exception, $"{jsondata}");
                string mysqlstr = $"update forlocal set data='{jsondata}' where plcnum='{pro.SEQUENCE}'";
                string mysqlstr = $"update forlocal set data='{jsondata}',pid='{pro.PID}' where plcnum='{pro.SEQUENCE}'";
                if (Operatoremysql(mysqlstr, connStrLocal))
                {
@@ -200,35 +189,118 @@
            }
        }
        public void NewForAll(ProductModel pro, string devicestr)
        public void NewForAll(ProductModel pro, string devicestr, string netname)
        {
            Task.Run(() =>
            {
                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);
                    string str1 = "select id from forall  order by id desc limit 1";
                    string index = selectmysql(str1, connStrAll);
                    if (!string.IsNullOrEmpty(index))
                    if (string.IsNullOrEmpty(netname) /*|| devicestr != "S3" */)
                    {
                        string str2 = $"delete from forall where id < ({index}-1000)";
                        Operatoremysql(str2, connStrAll);
                    }
                        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 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, $"数据库forall插入数据成功");
                            }
                        }
                    }
                    else
                    {
                        CommonLogger.LogAsync(DateTime.Now, EnumHelper.LogLevel.Error, $"数据库forall插入数据异失败  {mysqlstr}");
                        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, $"数据库forall更新数据成功");
                        }
                        else
                        {
                            CommonLogger.LogAsync(DateTime.Now, EnumHelper.LogLevel.Error, $"数据库forall更新数据异常  {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, $"数据库forall插入数据成功");
                        }
                        else
                        {
                            CommonLogger.LogAsync(DateTime.Now, EnumHelper.LogLevel.Error, $"数据库forall插入数据异失败  {mysqlstr}");
                        }
                    }
                }
@@ -263,20 +335,77 @@
            return null;
        }
        public string Getbasketcode(string plcnum)
        public List<Netdefectdetail> GetNetdefectdetails(string plcnum)
        {
            try
            {
                string mysqlstr = $"select basketcode from forall where plcnum='{plcnum}' && device='S2' order by id desc limit 1";
                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))
                if (string.IsNullOrEmpty(str))
                {
                    return 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, $"数据库forlocal获取异常 {e.ToString()}");
                CommonLogger.LogAsync(DateTime.Now, EnumHelper.LogLevel.Exception, $"数据库forlocal获取对象异常 {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, $"数据库forlocal获取对象异常 {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";
        }
@@ -286,7 +415,7 @@
        {
            try
            {
                string mysqlstr = $"select data from forall where plcnum='{plcnum}'";
                string mysqlstr = $"select data from forall where plcnum='{plcnum}' order by device";
                var dt = selectdt(mysqlstr, connStrAll);
                if (dt == null)
                {
@@ -297,7 +426,9 @@
                    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 });
                        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);
@@ -313,5 +444,52 @@
        }
        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, $"数据库forall数据异常 {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, $"数据库basketcode插入数据成功");
                }
                else
                {
                    CommonLogger.LogAsync(DateTime.Now, EnumHelper.LogLevel.Error, $"数据库basketcode插入数据异失败  {mysqlstr}");
                }
            }
            catch (Exception e)
            {
                CommonLogger.LogAsync(DateTime.Now, EnumHelper.LogLevel.Exception, $"数据库basketcode插入数据异常 {e.ToString()}");
            }
        }
    }
}