alielie
2026-04-23 ef52fd6fd07508883dce4eb002acda59f0169e59
HMI.LogViewer/LogViewer.xaml.cs
@@ -1,6 +1,8 @@
using HMI.Base;
using HMI.Core.Util;
using HMI.UI.Util;
using HMI.Util;
using Microsoft.Win32;
using System;
using System.Collections.Generic;
using System.Data;
@@ -131,8 +133,26 @@
            }
        }
        private void DoExport() {
        private void DoExport()
        {
            try
            {
                SaveFileDialog sfd = new SaveFileDialog
                {
                    Filter = "Excel Files (*.xls)|*.xls",
                };
                if (sfd.ShowDialog() == true)
                {
                    var dt = GetDataTable(false, 1, 1, out long totalPage);
                    ExcelHelper.ExportExcel<LogData>(sfd.FileName, dt);
                    ToastHelper.Success(this.lang("App.ExportSuccess"));
                }
            }
            catch (Exception ex)
            {
                log.Error("Export Log Failed.", ex);
                MsgBoxHelper2.Error($"导出失败: {ex.Message}");
            }
        }
        private void QueryLog()
@@ -180,45 +200,89 @@
            endTimeInput.SelectedDateTime = end;
        }
        public DataTable GetDataTable(bool usePage, long page, long size, out long totalPage)
        {
            totalPage = 0;
            var files = GetOldDbFiles(PathHelper.LogViewerDir, new DateTime?[] { startTimeInput.SelectedDateTime,
                endTimeInput.SelectedDateTime });
            if (files.Length <= 0)
            {
                return new DataTable();
            }
            using (Sqlite3Helper helper = new Sqlite3Helper(files[0]))
            {
                for (int i = 0; i < files.Length; i++)
                {
                    var attach = $"ATTACH DATABASE '{files[i]}' AS 'db{i}'";
                    helper.Execute(attach);
                }
                string sql = string.Join(" UNION ALL ", GetSqls(files));
                string sortName = "time", sortDirection = "DESC";
                string baseSql = $"SELECT level,time,source,text FROM ({sql}) as _temp";
                string countSql = $"SELECT COUNT(1) FROM ({sql}) as __temp";
                long total = (long)helper.SelectOne(countSql);
                totalPage = (total / pageSize) + ((total % pageSize) > 0 ? 1 : 0);
                if (usePage)
                {
                    sql = $"{baseSql} ORDER BY {sortName} {sortDirection} LIMIT {size} OFFSET {(page - 1) * size} ";
                }
                else
                {
                    sql = $"{baseSql} ORDER BY {sortName} {sortDirection}";
                }
                DataTable dt = helper.GetDataTable(sql);
                return dt;
            }
        }
        private void Filtrate(long page, long size)
        {
            try
            {
                var files = GetOldDbFiles(PathHelper.LogViewerDir, new DateTime?[] { startTimeInput.SelectedDateTime,
                endTimeInput.SelectedDateTime });
                if (files.Length <= 0)
                {
                    table.ItemsSource = new DataTable().DefaultView;
                    return;
                }
                //var files = GetOldDbFiles(PathHelper.LogViewerDir, new DateTime?[] { startTimeInput.SelectedDateTime,
                //endTimeInput.SelectedDateTime });
                //if (files.Length <= 0)
                //{
                //    table.ItemsSource = new DataTable().DefaultView;
                //    return;
                //}
                using (Sqlite3Helper helper = new Sqlite3Helper(files[0]))
                {
                    for (int i = 0; i < files.Length; i++)
                    {
                        var attach = $"ATTACH DATABASE '{files[i]}' AS 'db{i}'";
                        helper.Execute(attach);
                    }
                //using (Sqlite3Helper helper = new Sqlite3Helper(files[0]))
                //{
                //    for (int i = 0; i < files.Length; i++)
                //    {
                //        var attach = $"ATTACH DATABASE '{files[i]}' AS 'db{i}'";
                //        helper.Execute(attach);
                //    }
                    string sql = string.Join(" UNION ALL ", GetSqls(files));
                //    string sql = string.Join(" UNION ALL ", GetSqls(files));
                    string sortName = "time", sortDirection = "DESC";
                //    string sortName = "time", sortDirection = "DESC";
                    string baseSql = $"SELECT level,time,source,text FROM ({sql}) as _temp";
                //    string baseSql = $"SELECT level,time,source,text FROM ({sql}) as _temp";
                    string countSql = $"SELECT COUNT(1) FROM ({sql}) as __temp";
                //    string countSql = $"SELECT COUNT(1) FROM ({sql}) as __temp";
                    long total = (long)helper.SelectOne(countSql);
                    long pages = (total/pageSize)+ ((total % pageSize) > 0 ? 1 : 0);
                //    long total = (long)helper.SelectOne(countSql);
                //    long pages = (total/pageSize)+ ((total % pageSize) > 0 ? 1 : 0);
                    sql = $"{baseSql} ORDER BY {sortName} {sortDirection} LIMIT {size} OFFSET {(page - 1) * size} ";
                //    sql = $"{baseSql} ORDER BY {sortName} {sortDirection} LIMIT {size} OFFSET {(page - 1) * size} ";
                    DataTable dt = helper.GetDataTable(sql);
                    table.ItemsSource = dt.DefaultView;
                //    DataTable dt = helper.GetDataTable(sql);
                //    table.ItemsSource = dt.DefaultView;
                    MaxPage = pages;
                }
                //    MaxPage = pages;
                //}
                table.ItemsSource = GetDataTable(true, page, size, out long totalPage).DefaultView;
                MaxPage = totalPage;
            }
            catch (Exception ex)
            {