alielie
2025-10-13 e3868d4d61ded0e76fc8fe3fdacdd9e6d9113cf1
Plugin.DataBoard/DataBoard.xaml.cs
@@ -10,6 +10,7 @@
using System.Drawing;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
@@ -76,14 +77,37 @@
            }
        }
        public static string[] GetDbFiles(string folderPath, DateTime startTime, DateTime endTime)
        {
            if (!Directory.Exists(folderPath))
            {
                return new string[0];
            }
            string startName = $"Data_{startTime.ToString("yyyyMMdd")}";
            string endName = $"Data_{endTime.ToString("yyyyMMdd")}";
            var oldFiles = Directory.GetFiles(folderPath, "Data_*.db");
            oldFiles = oldFiles.Where(file =>
            {
                var fileName = Path.GetFileNameWithoutExtension(file);
                bool flag = true;
                if (startTime != null) flag &= (string.Compare(fileName, startName) == 1 || fileName == startName);
                if (endTime != null) flag &= (string.Compare(endName, fileName) == 1 || fileName == endName);
                return flag;
            }).ToArray();
            return oldFiles;
        }
        private List<SerialData> SelectSerialDataByTime(DateTime start, DateTime end)
        {
            string[] files = DbFileHelper.GetDbFiles(BaseFolder, start, end);
            var s1 = DateTime.Now;
            string[] files = GetDbFiles(BaseFolder, start, end);
            if (files == null || files.Length <= 0)
            {
                return new List<SerialData>();
            }
            string sql = $"SELECT * FROM serialData WHERE time BETWEEN '{start:yyyy-MM-dd HH:mm:ss}' AND '{end:yyyy-MM-dd HH:mm:ss}';";
            string sql = $"SELECT * FROM serialData WHERE time BETWEEN '{start:yyyy-MM-dd HH:mm:ss}' AND '{end:yyyy-MM-dd HH:mm:ss}' ORDER BY time DESC;";
            DataTable dt = new DataTable();
            foreach (string file in files)
@@ -93,12 +117,16 @@
                    dt.Merge(helper.GetDataTable(sql));
                }
            }
            return BeanUtil.ReadBeanFromDataTable<SerialData>(dt);
            var s2 = DateTime.Now;
            log.Info($"SelectSerialDataByTime Cast: {(s2 - s1).TotalMilliseconds}");
            var data = BeanUtil.ReadBeanFromDataTable<SerialData>(dt);
            log.Info($"Bean Cast: {(DateTime.Now - s2).TotalMilliseconds}");
            return data;
        }
        private List<SerialData> SelectResultDataByTime(DateTime start, DateTime end)
        {
            string[] files = DbFileHelper.GetDbFiles(BaseFolder, start, end);
            string[] files = GetDbFiles(BaseFolder, start, end);
            if (files == null || files.Length <= 0)
            {
                return new List<SerialData>();
@@ -110,7 +138,8 @@
            {
                using (SqliteHelper helper = new SqliteHelper(file))
                {
                    dt.Merge(helper.GetDataTable(sql));
                    var temp = helper.GetDataTable(sql);
                    dt.Merge(temp);
                }
            }
            return BeanUtil.ReadBeanFromDataTable<SerialData>(dt);
@@ -137,14 +166,55 @@
            webview2.CoreWebView2?.ExecuteScriptAsync($"resize({width},{height})");
        }
        //private void RefreshChart0(DateTime start, DateTime end)
        //{
        //    dtp00.SelectedDateTime = start;
        //    dtp01.SelectedDateTime = end;
        //    Task.Run(() =>
        //    {
        //        try
        //        {
        //            var st = DateTime.Now;
        //            List<SerialData> datas = SelectSerialDataByTime(start, end);
        //            log.Info($"0 Select Data cast: {(DateTime.Now-st).TotalMilliseconds}");
        //            datas.OrderByDescending(e => e.time);
        //            int all = 0, output = 0;
        //            HashSet<string> snCache = new HashSet<string>();
        //            foreach (var data in datas)
        //            {
        //                if (snCache.Contains(data.sn)) continue;
        //                snCache.Add(data.sn);
        //                all++;
        //                if (data.status == "Passed") output++;
        //            }
        //            var fields = $"['{this.lang("bd.input")}','{this.lang("bd.output")}']";
        //            Dispatcher.BeginInvoke(new Action(() =>
        //            {
        //                webview2.CoreWebView2?.ExecuteScriptAsync($"drawChart0({fields}, [{all},{output}])");
        //            }));
        //        }
        //        catch (Exception ex)
        //        {
        //            log.Error("RefreshChart0 Error.", ex);
        //            ToastHelper.Error("表1刷新失败!");
        //        }
        //    });
        //}
        private void RefreshChart0(DateTime start, DateTime end)
        {
            try
            {
                dtp00.SelectedDateTime = start;
                dtp01.SelectedDateTime = end;
                List<SerialData> datas = SelectSerialDataByTime(start, end);
            Task.Run(() =>
            {
                try
                {
                    Dispatcher.BeginInvoke(new Action(() =>
                    {
                        webview2.CoreWebView2?.ExecuteScriptAsync($"loading0('加载中,请稍后...')");
                    }));
                    List<SerialData> datas = SelectResultDataByTime(start, end);
                datas.OrderByDescending(e => e.time);
                int all = 0, output = 0;
                HashSet<string> snCache = new HashSet<string>();
@@ -153,25 +223,34 @@
                    if (snCache.Contains(data.sn)) continue;
                    snCache.Add(data.sn);
                    all++;
                    if (data.status == "Passed") output++;
                        if (data.result == "Passed") output++;
                }
                var fields = $"['{this.lang("bd.input")}','{this.lang("bd.output")}']";
                    Dispatcher.BeginInvoke(new Action(() =>
                    {
                webview2.CoreWebView2?.ExecuteScriptAsync($"drawChart0({fields}, [{all},{output}])");
                    }));
            }
            catch (Exception ex)
            {
                log.Error("RefreshChart0 Error.", ex);
                ToastHelper.Error("表1刷新失败!");
            }
            });
        }
        private void RefreshChart1(DateTime start, DateTime end)
        {
            try
            {
                dtp10.SelectedDateTime = start;
                dtp11.SelectedDateTime = end;
            Task.Run(() =>
            {
                try
                {
                    Dispatcher.BeginInvoke(new Action(() =>
                    {
                        webview2.CoreWebView2?.ExecuteScriptAsync($"loading1('加载中,请稍后...')");
                    }));
                List<SerialData> datas = SelectResultDataByTime(start, end);
                datas = datas.OrderByDescending(e => e.time).ToList();
@@ -205,13 +284,17 @@
                    res += $"{{name:'{key}',value:{pieData[key]}}},";
                }
                res += "]";
                    Dispatcher.BeginInvoke(new Action(() =>
                    {
                webview2.CoreWebView2?.ExecuteScriptAsync($"drawChart1({res})");
                    }));
            }
            catch (Exception ex)
            {
                log.Error("RefreshChart1 Error.", ex);
                ToastHelper.Error("表2刷新失败!");
            }
            });
        }
        //private void RefreshChart2(DateTime start, DateTime end)
@@ -282,10 +365,16 @@
        private void RefreshChart2(DateTime start, DateTime end)
        {
            try
            {
                dtp20.SelectedDateTime = start;
                dtp21.SelectedDateTime = end;
            Task.Run(() =>
            {
                try
                {
                    Dispatcher.BeginInvoke(new Action(() =>
                    {
                        webview2.CoreWebView2?.ExecuteScriptAsync($"loading2('加载中,请稍后...')");
                    }));
                List<SerialData> datas = SelectResultDataByTime(start, end);
                var groups =
@@ -329,8 +418,6 @@
                    });
                }
                string fields = "[", vals0 = "[", vals1 = "[";
                foreach (var key in res.Keys)
                {
@@ -342,26 +429,35 @@
                vals0 += "]";
                vals1 += "]";
                var names = $"['{this.lang("bd.onePassRate")}','{this.lang("bd.passRate")}']";
                    Dispatcher.BeginInvoke(new Action(() =>
                    {
                webview2.CoreWebView2?.ExecuteScriptAsync($"drawChart2({fields},{names},{vals0},{vals1})");
                    }));
            }
            catch (Exception ex)
            {
                log.Error("RefreshChart2 Error.", ex);
                ToastHelper.Error("表3刷新失败!");
            }
            });
        }
        private void RefreshChart3(DateTime start, DateTime end)
        {
            try
            {
                dtp30.SelectedDateTime = start;
                dtp31.SelectedDateTime = end;
            Task.Run(() =>
            {
                try
                {
                    Dispatcher.BeginInvoke(new Action(() =>
                    {
                        webview2.CoreWebView2?.ExecuteScriptAsync($"loading3('加载中,请稍后...')");
                    }));
                    var st = DateTime.Now;
                List<SerialData> datas = SelectSerialDataByTime(start, end);
                datas = datas.OrderByDescending(e => e.time).ToList();
                    var s2 = DateTime.Now;
                    log.Info($"RefreshChart3 Data Cast {(s2 - st).TotalMilliseconds}");
                Dictionary<string, SimpleData> pieData = new Dictionary<string, SimpleData>();
                List<SimpleData> datasource = new List<SimpleData>();
@@ -390,6 +486,8 @@
                {
                    datasource = datasource.Take(10).ToList();
                }
                    var s3 = DateTime.Now;
                    log.Info($"RefreshChart3 Build {(s3 - s2).TotalMilliseconds}");
                string names = string.Empty, vals = string.Empty;
                foreach (var data in datasource)
@@ -397,14 +495,17 @@
                    names += $"'{data.Name}',";
                    vals += $"{data.Value},";
                }
                    Dispatcher.BeginInvoke(new Action(() =>
                    {
                webview2.CoreWebView2?.ExecuteScriptAsync($"drawChart3([{names}],[{vals}])");
                    }));
            }
            catch (Exception ex)
            {
                log.Error("RefreshChart3 Error.", ex);
                ToastHelper.Error("表4刷新失败!");
            }
            });
        }
        private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)