123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533 |
- using MeterVision.Config;
- using MeterVision.db;
- using MeterVision.Dlg;
- using MeterVision.FreeAi;
- using MeterVision.Patch;
- using MeterVision.Single;
- using MeterVision.Stand;
- using MeterVision.Station;
- using MeterVision.Upgrade;
- using MeterVision.Util;
- using Newtonsoft.Json;
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.IO;
- using System.Linq;
- using System.Runtime.InteropServices;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows;
- using System.Windows.Controls;
- using System.Windows.Data;
- using System.Windows.Documents;
- using System.Windows.Input;
- using System.Windows.Media;
- using System.Windows.Media.Imaging;
- using System.Windows.Navigation;
- using System.Windows.Shapes;
- namespace MeterVision
- {
- /// <summary>
- /// MainWindow.xaml 的交互逻辑
- /// </summary>
- public partial class MainWindow : Window
- {
- //全局硬件码
- public static string MachineCode;
- //绑定ConfigItem的属性就可以完成绑定操作
- //public event PropertyChangedEventHandler PropertyChanged;
- //protected void OnPropertyChanged(string propertyName)
- //{
- // PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
- //}
- //private ConfigItem _configItem;
- //public ConfigItem mConfigItem
- //{
- // get => _configItem;
- // set
- // {
- // _configItem = value;
- // //确保通知属性更改
- // //OnPropertyChanged(nameof(mConfigItem));
- // }
- //}
- [DllImport("kernel32.dll", SetLastError = true)]
- static extern IntPtr AddDllDirectory(string NewDirectory);
- [DllImport("kernel32.dll")]
- static extern bool SetDefaultDllDirectories(uint DirectoryFlags);
- const uint LOAD_LIBRARY_SEARCH_DEFAULT_DIRS = 0x00001000;
- //--------------------------------------------
- private SolidColorBrush SelectedForeground;
- public CfginiItem CurConfigItem { get; set; }
- //字典用于缓存已加载的页面
- private Dictionary<string, object> pageCache = new Dictionary<string, object>();
- //第几个实例
- public int InstanceIndex { get; set; }
- public MainWindow()
- {
- InitializeComponent();
- SetDefaultDllDirectories(LOAD_LIBRARY_SEARCH_DEFAULT_DIRS);
- //AddDllDirectory(AppDomain.CurrentDomain.BaseDirectory + "dlls");
- AddDllDirectory(AppDomain.CurrentDomain.BaseDirectory);
- this.Title = $"{this.Title} V{UpgradeHelper.GetCurrentVersion()}";
- SelectedForeground = Brushes.DarkGreen;
- //new SolidColorBrush((Color)ColorConverter.ConvertFromString("#2196F3"));
- ResetButtonForegrounds();
- CurConfigItem = CfginiItem.GetConfigItem(); //ConfigItem.GetConfigItem();
- this.DataContext = this;
- this.Loaded += MainWindow_Loaded;
- UpdateDatabase();
- }
- //更新数据库(因为有添加的字段)
- private void UpdateDatabase()
- {
- DBPatch.UpdateTPatchDetailSchema();
- DBSingle.UpdateTSingleDetailSchema();
- }
- private void MainWindow_Loaded(object sender, RoutedEventArgs e)
- {
- if(LicenseMana.mLicenseModel != null)
- {
- if (LicenseMana.mLicenseModel.IsPermanent)
- {
- this.Title = $"{this.Title} (永久注册)";
- }
- else
- {
- this.Title = $"{this.Title} (L)";
- }
- }
- else
- {
- this.Title = $"{this.Title} (未注册)";
- }
- //控制lblInstanceIndex背景色的颜色
- int colorIndex = InstanceIndex % 3;
- if(colorIndex == 1)
- {
- lblInstanceIndex.Background = Brushes.Red;
- }
- else if (colorIndex == 2)
- {
- lblInstanceIndex.Background = Brushes.Green;
- }
- else
- {
- lblInstanceIndex.Background = Brushes.Blue;
- }
- lblInstanceIndex.Content = $"第{InstanceIndex}个";
- }
- private void BtnConfig_Click(object sender, RoutedEventArgs e)
- {
- EditConfigDlg dialog = new EditConfigDlg()
- {
- Owner = this,
- WindowStartupLocation = WindowStartupLocation.CenterOwner
- };
- if(dialog.ShowDialog() == true)
- {
- }
- //ResetButtonForegrounds();
- //txtConfig.Foreground = Brushes.DarkGreen;
- //string key = "ConfigPage";
- //// 检查字典中是否已有该页面
- //if (pageCache.ContainsKey(key))
- //{
- // ContentArea.Content = pageCache[key]; // 如果存在,直接显示该页面
- //}
- //else
- //{
- // var page = new UCConfig(); //UCSingleGrid(); // 新建页面
- // //pageCache[key] = page; // 缓存页面
- // ContentArea.Content = page; // 显示新页面
- //}
- }
- private void BtnSetStation_Click(object sender, RoutedEventArgs e)
- {
- ResetButtonForegrounds();
- txtSetStation.Foreground = Brushes.DarkGreen;
- string key = "SetStation";
- // 检查字典中是否已有该页面
- if (pageCache.ContainsKey(key))
- {
- ContentArea.Content = pageCache[key]; // 如果存在,直接显示该页面
- }
- else
- {
- var page = new UCStationMain(); // 新建页面
- //pageCache[key] = page; // 缓存页面
- ContentArea.Content = page; // 显示新页面
- }
- }
- //单张图片的处理
- private void BtnSingleImage_Click(object sender, RoutedEventArgs e)
- {
- ResetButtonForegrounds();
- // 将被点击的按钮前景色设置为DarkGreen
- txtSingleImage.Foreground = SelectedForeground; //"#2196F3"
- //Brushes.DarkGreen;
- string key = "SingleImagePage";
- // 检查字典中是否已有该页面
- if (pageCache.ContainsKey(key))
- {
- ContentArea.Content = pageCache[key]; // 如果存在,直接显示该页面
- }
- else
- {
- var page = new UCSingleMain(); //UCSingleGrid(); // 新建页面
- pageCache[key] = page; // 缓存页面
- ContentArea.Content = page; // 显示新页面
- }
- }
- private void BtnStandImport_Click(object sender,RoutedEventArgs e)
- {
- ResetButtonForegrounds();
- // 将被点击的按钮前景色设置为DarkGreen
- txtStandImport.Foreground = Brushes.DarkGreen;
- string key = "StandImportPage";
- // 检查字典中是否已有该页面
- if (pageCache.ContainsKey(key))
- {
- ContentArea.Content = pageCache[key]; // 如果存在,直接显示该页面
- }
- else
- {
- var page = new UCStandMain(); // 新建页面
- pageCache[key] = page; // 缓存页面
- ContentArea.Content = page; // 显示新页面
- }
- }
- //批量图片的处理
- private void BtnPatchImage_Click(object sender, RoutedEventArgs e)
- {
- ResetButtonForegrounds();
- // 将被点击的按钮前景色设置为DarkGreen
- txtPatchImage.Foreground = Brushes.DarkGreen;
- string key = "PatchImagePage";
- // 检查字典中是否已有该页面
- if (pageCache.ContainsKey(key))
- {
- ContentArea.Content = pageCache[key]; // 如果存在,直接显示该页面
- }
- else
- {
- var page = new UCPatchMain();
- pageCache[key] = page; // 缓存页面
- ContentArea.Content = page; // 显示新页面
- }
- }
- private void BtnPatchCompare_Click(object sender, RoutedEventArgs e)
- {
- ResetButtonForegrounds();
- // 将被点击的按钮前景色设置为DarkGreen
- txtCompareImage.Foreground = Brushes.DarkGreen;
- string key = "CompareImagePage";
- // 检查字典中是否已有该页面
- if (pageCache.ContainsKey(key))
- {
- ContentArea.Content = pageCache[key]; // 如果存在,直接显示该页面
- }
- else
- {
- var page = new UCCompMain();
- pageCache[key] = page; // 缓存页面
- ContentArea.Content = page; // 显示新页面
- }
- }
- private void ResetButtonForegrounds()
- {
- //txtConfig.Foreground = Brushes.Black;
- txtSingleImage.Foreground = Brushes.Black;
- txtStandImport.Foreground = Brushes.Black;
- txtPatchImage.Foreground = Brushes.Black;
- txtCompareImage.Foreground = Brushes.Black;
- txtSetStation.Foreground = Brushes.Black;
- }
- private void BtnAbout_Click(object sender, RoutedEventArgs e)
- {
- AboutWindow aboutWindow = new AboutWindow()
- {
- Owner = Application.Current.MainWindow
- };
-
- aboutWindow.ShowDialog(); // 显示为模态窗口
- }
- private void BtnCheckUpgrade_Click(object sender, RoutedEventArgs e)
- {
- WaitWindow waitWindow = null;
- try
- {
- string titleInfo = "正在检查升级信息,请稍后...";
- waitWindow = new WaitWindow(titleInfo)
- {
- Owner = Application.Current.MainWindow,
- WindowStartupLocation = WindowStartupLocation.CenterOwner
- };
- waitWindow.Show();
- UpgradeModel upgradeModel = UpgradeHelper.ReadUpdateTxt();
- //waitWindow.Close();
- //获取当前的版本与versionCode比较
- string currentVersion = UpgradeHelper.GetCurrentVersion();
- // 获取服务器返回的 versionCode(假设是字符串 "1.0.0.6")
- string serverVersionCode = upgradeModel.VersionCode;
- if (UpgradeHelper.IsNewVersionAvailable(currentVersion, serverVersionCode))
- {
- //MessageBox.Show($"发现新版本({serverVersionCode})。请升级应用。", "升级提示",
- // MessageBoxButton.OK, MessageBoxImage.Information);
- WndUpdateAsk updateAsk = new WndUpdateAsk(upgradeModel)
- {
- Owner = Application.Current.MainWindow,
- WindowStartupLocation = WindowStartupLocation.CenterOwner
- };
- updateAsk.ShowDialog();
- }
- else
- {
- MessageBox.Show("当前已经是最新版本。", "无升级", MessageBoxButton.OK, MessageBoxImage.Information);
- }
- }
- catch(Exception ex)
- {
- MessageBox.Show(ex.Message, "错误", MessageBoxButton.OK, MessageBoxImage.Error);
- }
-
- if(waitWindow != null)
- {
- waitWindow.Close();
- }
- }
- //注册
- private void BtnReg_Click(object sender, RoutedEventArgs e)
- {
- RegisterDlg registerDlg = new RegisterDlg
- {
- Owner = this,
- WindowStartupLocation = WindowStartupLocation.CenterOwner
- };
- if (registerDlg.ShowDialog() == true)
- {
- }
- }
- private void Overlay_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
- {
- // 如果覆盖层可见且用户点击了它,则隐藏覆盖层并关闭对话框
- //if (this.overlay.Visibility == Visibility.Visible)
- //{
- // this.overlay.Visibility = Visibility.Collapsed;
- // // 尝试关闭与覆盖层关联的对话框
- // foreach (Window window in Application.Current.Windows)
- // {
- // if (window != this && window.IsActive)
- // {
- // window.Close();
- // break;
- // }
- // }
- //}
- }
- private void Window_PreviewMouseDown(object sender, MouseButtonEventArgs e)
- {
- // 查找所有打开的窗口
- foreach (Window child in Application.Current.Windows)
- {
- // 检查是否是你想要的窗口
- if (child is imgWindow || child is EditStandValueDlg || child is LogViewerWindow)
- {
- child.Close();
- }
- }
- }
- private void Window_PreviewKeyDown(object sender, KeyEventArgs e)
- {
- // 当按下 Esc 键时关闭对话框
- if (e.Key == Key.Escape)
- {
- foreach (Window child in Application.Current.Windows)
- {
- // 检查是否是你想要的窗口
- if (child is imgWindow || child is EditStandValueDlg || child is LogViewerWindow)
- {
- child.Close();
- }
- }
- }
- }
- public object GetActivityUC()
- {
- return ContentArea.Content;
- }
- private async void BtnFreeSpace_Click(object sender, RoutedEventArgs e)
- {
- string titleInfo = "正在释放数据库空间占用,请稍候...";
- WaitWindow waitWindow = new WaitWindow(titleInfo)
- {
- Owner = Application.Current.MainWindow,
- WindowStartupLocation = WindowStartupLocation.CenterOwner
- };
- waitWindow.Show();
- //DBStand.FreeDatabase();
- try
- {
- await Task.Run(() =>
- {
- DBStand.FreeDatabase();
- });
- }
- catch (Exception ex)
- {
- MessageBox.Show(Application.Current.MainWindow, $"失败:{ex.Message}", "错误",
- MessageBoxButton.OK, MessageBoxImage.Error);
- }
- finally
- {
- //关闭等待窗口
- waitWindow.Close();
- }
- MessageBox.Show(this, "已释放", "提示",MessageBoxButton.OK, MessageBoxImage.Information);
- }
- private void ChkRealSendAILog_Checked(object sender, RoutedEventArgs e)
- {
- FaRun.SendAiLogEnable = true;
- }
- private void ChkRealSendAILog_Unchecked(object sender, RoutedEventArgs e)
- {
- FaRun.SendAiLogEnable = false;
- }
- private void ChkRealRecordAILog_Checked(object sender, RoutedEventArgs e)
- {
- FaRun.RecordRealLogEnable = true;
- }
- private void ChkRealRecordAILog_Unchecked(object sender, RoutedEventArgs e)
- {
- FaRun.RecordRealLogEnable = false;
- }
- private void BtnViewRealLog_Click(object sender, RoutedEventArgs e)
- {
- ViewRealLogDlg dialog = new ViewRealLogDlg()
- {
- Owner = this,
- WindowStartupLocation = WindowStartupLocation.CenterOwner
- };
- dialog.ShowDialog();
- }
- //临时修改Json文件
- private void BtnUpdateJson_Click(object sender, RoutedEventArgs e)
- {
- string standJsonFile = @"D:\RT102_AI\mv2_json\goog_20250408120027.json";
- string updateJsonFile = @"D:\RT102_AI\mv2_json\all_20250401142632.json";
- string standJson = File.ReadAllText(standJsonFile);
- string updateJson = File.ReadAllText(updateJsonFile);
- List<TStandDetail> standList = JsonConvert.DeserializeObject<List<TStandDetail>>(standJson) ?? new List<TStandDetail>();
- List<TStandDetail> updateList = JsonConvert.DeserializeObject<List<TStandDetail>>(updateJson) ?? new List<TStandDetail>();
- foreach(TStandDetail stand in standList)
- {
- foreach(TStandDetail update in updateList)
- {
- if (stand.SrcImage.Equals(update.SrcImage))
- {
- update.StandValue = stand.StandValue;
- update.ENumCount = stand.ENumCount;
- update.ELastUnit = stand.ELastUnit;
- update.MeterType = stand.MeterType;
- update.BrightVal = stand.BrightVal;
- update.FlowRate = stand.FlowRate;
- update.DialRegion = stand.DialRegion;
- update.NumCount = stand.NumCount;
- update.IndCount = stand.IndCount;
- update.FeatureRegion = stand.FeatureRegion;
- update.LastUnit = stand.LastUnit;
- update.LastValue = stand.LastValue;
- update.LastTime = stand.LastTime;
- break;
- }
- }
- }
- string fileName = @"D:\RT102_AI\mv2_json\all_20250401142632_update.json";
- string json = JsonConvert.SerializeObject(updateList, Formatting.Indented); // 格式化 JSON
- File.WriteAllText(fileName, json);
- MessageBox.Show("修改完成");
- }
- //----------------------------------------------------------
- }
- }
|