From b544d5cccd76735e034c8055918a50927b437474 Mon Sep 17 00:00:00 2001
From: wenxiangchao <wenxiangchao@ihengxin.com.cn>
Date: 星期二, 10 十一月 2026 08:29:04 +0800
Subject: [PATCH] fix: 维护模式重复进入失败与按钮灰死 + Broker 并发验证用例

---
 HMI.LogViewer/LogViewer.xaml.cs |  120 ++++++++++++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 92 insertions(+), 28 deletions(-)

diff --git a/HMI.LogViewer/LogViewer.xaml.cs b/HMI.LogViewer/LogViewer.xaml.cs
index a2fc8f4..72f3461 100644
--- a/HMI.LogViewer/LogViewer.xaml.cs
+++ b/HMI.LogViewer/LogViewer.xaml.cs
@@ -1,6 +1,8 @@
 锘縰sing 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)
             {

--
Gitblit v1.9.1