| | |
| | | using System.Drawing; |
| | | using System.IO; |
| | | using System.Linq; |
| | | using System.Threading.Tasks; |
| | | using System.Windows; |
| | | using System.Windows.Controls; |
| | | |
| | |
| | | } |
| | | } |
| | | |
| | | 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) |
| | |
| | | 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>(); |
| | |
| | | { |
| | | using (SqliteHelper helper = new SqliteHelper(file)) |
| | | { |
| | | dt.Merge(helper.GetDataTable(sql)); |
| | | var temp = helper.GetDataTable(sql); |
| | | dt.Merge(temp); |
| | | } |
| | | } |
| | | return BeanUtil.ReadBeanFromDataTable<SerialData>(dt); |
| | |
| | | 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>(); |
| | |
| | | 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(); |
| | |
| | | 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) |
| | |
| | | |
| | | 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 = |
| | |
| | | }); |
| | | } |
| | | |
| | | |
| | | |
| | | string fields = "[", vals0 = "[", vals1 = "["; |
| | | foreach (var key in res.Keys) |
| | | { |
| | |
| | | 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>(); |
| | |
| | | { |
| | | 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) |
| | |
| | | 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) |