| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400 |
- using CCDCount.DLL;
- using CCDCount.DLL.SqlDataClass;
- using CCDCount.MODEL.ConfigModel;
- using CCDCount.MODEL.ShuLiModel;
- using CCDCountWpf.Language;
- using System;
- using System.Collections.Generic;
- using System.Diagnostics;
- using System.Drawing;
- using System.IO;
- using System.Linq;
- 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.Markup;
- using System.Windows.Media;
- using System.Windows.Media.Imaging;
- using System.Windows.Navigation;
- using System.Windows.Shapes;
- namespace CCDCountWpf.WpfPage
- {
- /// <summary>
- /// HistoryDataPage.xaml 的交互逻辑
- /// </summary>
- public partial class HistoryDataPage : Page
- {
- private static ActionMesSqliteDataClass actionMesSqliteDataClass = null;
- List<ActiveObjectClass> ErrorActive = null;
- List<ActiveObjectClass> NowPageError = null;
- int NowErrorNum = 0;
- int DataStartLine = 0;
- private int PageHeight = 2000;
- public HistoryDataPage()
- {
- InitializeComponent();
- DataContext = ShowMessageBus.ShowBinding;
- InitBatchItems();
- UpDateShowBinding();
- }
- private void PreviousBtn_Click(object sender, RoutedEventArgs e)
- {
- if (ShowMessageBus.ShowBinding.HistoryImageNum <= 1)
- {
- MessageBox.Show("已经是第一页");
- return;
- }
- ShowMessageBus.ShowBinding.HistoryImageNum -= 1;
- UpDateShowBinding();
- }
- private void NextBtn_Click(object sender, RoutedEventArgs e)
- {
- if (ShowMessageBus.ShowBinding.HistoryImageNum >= ShowMessageBus.ShowBinding.HistoryImageCount)
- {
- MessageBox.Show("已经是最后一页");
- return;
- }
- ShowMessageBus.ShowBinding.HistoryImageNum += 1;
- UpDateShowBinding();
- }
- private void UpDateShowBinding()
- {
- if (actionMesSqliteDataClass == null)
- {
- return;
- }
- Stopwatch stopwatch = Stopwatch.StartNew();
- BitmapImage ShowBitMap = null;
- Bitmap BitmapImage = null;
- List<ActiveObjectClass> ShowResult = actionMesSqliteDataClass.GetActiveObjectForPage((ShowMessageBus.ShowBinding.HistoryImageNum - 1) * PageHeight + DataStartLine, ShowMessageBus.ShowBinding.HistoryImageNum * PageHeight + DataStartLine);
- if (ShowResult.Count > 0)
- {
- int ThisImageStartLine = (int)ShowResult.Min(o => o.StartLine);
- int ImageHeight = (int)(ShowResult.Max(o => o.LastSeenLine) - ShowResult.Min(o => o.StartLine))+50;
- int ImageWidth = ShowResult.Max(o => o.ImageWidth);
- BitmapImage = new Bitmap(ImageWidth, ImageHeight <= PageHeight ? PageHeight : ImageHeight);
- using (Graphics g = Graphics.FromImage(BitmapImage))
- {
- g.Clear(System.Drawing.Color.White);
- var redPen = new System.Drawing.Pen(System.Drawing.Color.Red, 1);
- var bluePen = new System.Drawing.Pen(System.Drawing.Color.FromArgb(0, 146, 255), 1);
- var GreenPen = new System.Drawing.Pen(System.Drawing.Color.SeaGreen, 5);
- foreach (var item in ShowResult)
- {
- int roix = item.MinStartCol - 5;
- int roiy = (int)(item.StartLine - ThisImageStartLine) + 15;
- int roiheight = (int)(item.LastSeenLine - (long)item.StartLine) + 10;
- int roiwidth = item.MaxEndCol - item.MinStartCol + 10;
- g.DrawRectangle(GreenPen, new System.Drawing.Rectangle(roix, roiy, roiwidth, roiheight));
- Font font = new Font("Arial", 20);
- g.DrawString(item.Num.ToString(), font, System.Drawing.Brushes.Black, new System.Drawing.Point(roix - 20 * item.Num.ToString().Length, roiy - 20));
- if(item.StateCode!=0)
- {
- string ErrorMessage = "";
- if (item.StateCode == 1)
- ErrorMessage = "LONG";
- else if (item.StateCode == 2)
- ErrorMessage = "SHORT";
- else if (item.StateCode == 5)
- ErrorMessage = "BIG";
- else if (item.StateCode == 6)
- ErrorMessage = "SMALL";
- g.DrawString(ErrorMessage, font, System.Drawing.Brushes.Black, new System.Drawing.Point(roix - 20 * item.Num.ToString().Length, roiy - 50));
- }
- g.DrawString(item.Num.ToString(), font, System.Drawing.Brushes.Black, new System.Drawing.Point(roix - 20 * item.Num.ToString().Length, roiy - 20));
- foreach (var item1 in item.RowsData)
- {
- int yPos = (int)(item1.RowsCol - ThisImageStartLine + 20);
- g.DrawLine(item.StateCode == 0 ? bluePen : redPen, new System.Drawing.Point(item1.StartCol, yPos), new System.Drawing.Point(item1.EndCol, yPos));
- }
- }
- }
- }
- else
- {
- BitmapImage = new Bitmap(4096, PageHeight);
- using (Graphics g = Graphics.FromImage(BitmapImage))
- {
- g.Clear(System.Drawing.Color.White);
- }
- }
- Application.Current.Dispatcher.InvokeAsync(() =>
- {
- ShowBitMap = ConvertToBitmapImage(BitmapImage);
- ShowMessageBus.ShowBinding.HistoryImage = ShowBitMap;
- });
- stopwatch.Stop();
- Console.WriteLine($"{stopwatch.ElapsedMilliseconds}ms");
- NowPageError = ShowResult.Where(o => o.StateCode != 0).OrderBy(o => o.Num).ToList();
- }
- // Bitmap 转 BitmapImage 的辅助方法
- private BitmapImage ConvertToBitmapImage(Bitmap bitmap)
- {
- using (MemoryStream memory = new MemoryStream())
- {
- bitmap.Save(memory, System.Drawing.Imaging.ImageFormat.Png);
- memory.Position = 0;
- var bitmapImage = new BitmapImage();
- bitmapImage.BeginInit();
- bitmapImage.CacheOption = BitmapCacheOption.OnLoad;
- bitmapImage.StreamSource = memory;
- bitmapImage.EndInit();
- return bitmapImage;
- }
- }
- private void SkipBtn_Click(object sender, RoutedEventArgs e)
- {
- UpDateShowBinding();
- }
- /// <summary>
- /// 初始化批次列表
- /// </summary>
- private void InitBatchItems()
- {
- string folderPath = $"{AppDomain.CurrentDomain.BaseDirectory}DATA\\ActiveObjectData\\Cam{MessageBus.NowSettingLoadMainThread.cameraConfig.CamerNo}";
- if (!Directory.Exists(folderPath))
- {
- // 创建文件夹
- Directory.CreateDirectory(folderPath);
- }
- try
- {
- // 使用 DirectoryInfo 获取文件并按修改时间排序
- DirectoryInfo dirInfo = new DirectoryInfo(folderPath);
- FileInfo[] files = dirInfo.GetFiles("*.db", SearchOption.AllDirectories);
- // 按照修改时间排序(最新的在前)
- var sortedFiles = files.OrderByDescending(f => f.LastWriteTime).ToArray();
- ShowMessageBus.ShowBinding.BatchItems.Clear();
- foreach (FileInfo file in sortedFiles)
- {
- ShowMessageBus.ShowBinding.BatchItems.Add(System.IO.Path.GetFileNameWithoutExtension(file.Name).Split('_')[1]);
- }
- BatchNumComBox.SelectedIndex = 0;
- }
- catch
- { }
- }
- /// <summary>
- /// 初始化批号列表
- /// </summary>
- private void InitBatchItems(DateTime Mintime, DateTime MaxTime)
- {
- string folderPath = $"{AppDomain.CurrentDomain.BaseDirectory}DATA\\ActiveObjectData\\Cam{MessageBus.NowSettingLoadMainThread.cameraConfig.CamerNo}";
- if (!Directory.Exists(folderPath))
- {
- // 创建文件夹
- Directory.CreateDirectory(folderPath);
- }
- try
- {
- // 使用 DirectoryInfo 获取文件并按修改时间排序
- DirectoryInfo dirInfo = new DirectoryInfo(folderPath);
- FileInfo[] files = dirInfo.GetFiles("*.db", SearchOption.AllDirectories);
- // 按照修改时间排序(最新的在前)
- var sortedFiles = files.Where(f => f.CreationTime > Mintime && f.CreationTime < MaxTime.AddDays(1)).OrderByDescending(f => f.LastWriteTime).ToArray();
- ShowMessageBus.ShowBinding.BatchItems.Clear();
- foreach (FileInfo file in sortedFiles)
- {
- ShowMessageBus.ShowBinding.BatchItems.Add(System.IO.Path.GetFileNameWithoutExtension(file.Name).Split('_')[1]);
- }
- BatchNumComBox.SelectedIndex = 0;
- }
- catch
- { }
- }
- /// <summary>
- /// 初始化批号列表
- /// </summary>
- private void InitBatchItemsByMinTime(DateTime Mintime)
- {
- string folderPath = $"{AppDomain.CurrentDomain.BaseDirectory}DATA\\ActiveObjectData\\Cam{MessageBus.NowSettingLoadMainThread.cameraConfig.CamerNo}";
- if (!Directory.Exists(folderPath))
- {
- // 创建文件夹
- Directory.CreateDirectory(folderPath);
- }
- try
- {
- // 使用 DirectoryInfo 获取文件并按修改时间排序
- DirectoryInfo dirInfo = new DirectoryInfo(folderPath);
- FileInfo[] files = dirInfo.GetFiles("*.db", SearchOption.AllDirectories);
- // 按照修改时间排序(最新的在前)
- var sortedFiles = files.Where(f => f.CreationTime > Mintime).OrderByDescending(f => f.LastWriteTime).ToArray();
- ShowMessageBus.ShowBinding.BatchItems.Clear();
- foreach (FileInfo file in sortedFiles)
- {
- ShowMessageBus.ShowBinding.BatchItems.Add(System.IO.Path.GetFileNameWithoutExtension(file.Name).Split('_')[1]);
- }
- BatchNumComBox.SelectedIndex = 0;
- }
- catch
- { }
- }
- /// <summary>
- /// 初始化批号列表
- /// </summary>
- private void InitBatchItemsByMaxTime(DateTime MaxTime)
- {
- string folderPath = $"{AppDomain.CurrentDomain.BaseDirectory}DATA\\ActiveObjectData\\Cam{MessageBus.NowSettingLoadMainThread.cameraConfig.CamerNo}";
- if (!Directory.Exists(folderPath))
- {
- // 创建文件夹
- Directory.CreateDirectory(folderPath);
- }
- try
- {
- // 使用 DirectoryInfo 获取文件并按修改时间排序
- DirectoryInfo dirInfo = new DirectoryInfo(folderPath);
- FileInfo[] files = dirInfo.GetFiles("*.db", SearchOption.AllDirectories);
- // 按照修改时间排序(最新的在前)
- var sortedFiles = files.Where(f => f.CreationTime < MaxTime.AddDays(1)).OrderByDescending(f => f.LastWriteTime).ToArray();
- ShowMessageBus.ShowBinding.BatchItems.Clear();
- foreach (FileInfo file in sortedFiles)
- {
- ShowMessageBus.ShowBinding.BatchItems.Add(System.IO.Path.GetFileNameWithoutExtension(file.Name).Split('_')[1]);
- }
- BatchNumComBox.SelectedIndex = 0;
- }
- catch
- { }
- }
- private void BatchNumRecordMinTime_SelectedDateChanged(object sender, SelectionChangedEventArgs e)
- {
- if (BatchNumRecordMinTime.SelectedDate == null)
- {
- return;
- }
- else
- {
- if (BatchNumRecordMaxTime.SelectedDate == null)
- {
- InitBatchItemsByMinTime((DateTime)BatchNumRecordMinTime.SelectedDate);
- }
- else
- {
- InitBatchItems((DateTime)BatchNumRecordMinTime.SelectedDate, (DateTime)BatchNumRecordMaxTime.SelectedDate);
- }
- }
- }
- private void BatchNumRecordMaxTime_SelectedDateChanged(object sender, SelectionChangedEventArgs e)
- {
- if (BatchNumRecordMaxTime.SelectedDate == null)
- {
- return;
- }
- else
- {
- if (BatchNumRecordMinTime.SelectedDate == null)
- {
- InitBatchItemsByMaxTime((DateTime)BatchNumRecordMaxTime.SelectedDate);
- }
- else
- {
- InitBatchItems((DateTime)BatchNumRecordMinTime.SelectedDate, (DateTime)BatchNumRecordMaxTime.SelectedDate);
- }
- }
- }
- private void BatchNumRecordComBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
- {
- if (BatchNumComBox.SelectedItem != null && BatchNumComBox.SelectedItem.ToString() != string.Empty)
- {
- string BatchNumber = BatchNumComBox.SelectedItem.ToString();
- actionMesSqliteDataClass = new ActionMesSqliteDataClass($"{AppDomain.CurrentDomain.BaseDirectory}DATA\\ActiveObjectData\\Cam{MessageBus.NowSettingLoadMainThread.cameraConfig.CamerNo}\\ActiveObjectData_{BatchNumber}.db");
- //actionMesSqliteDataClass = new ActionMesSqliteDataClass($"{AppDomain.CurrentDomain.BaseDirectory}DATA\\ActiveObjectData\\Cam{MessageBus.MainThreadS[0].cameraConfig.CamerNo}\\ActiveObjectData_20250908.db");
- actionMesSqliteDataClass.GetAllActionMinStartMaxEndLine(out int num, out int StartLine, out int EndLine);
- ShowMessageBus.ShowBinding.HistoryImageCount = (EndLine - StartLine) / PageHeight;
- DataStartLine = StartLine;
- ShowMessageBus.ShowBinding.HistoryImageNum = 1;
- UpDateShowBinding();
- ErrorActive = actionMesSqliteDataClass.GetAllErrorAction().OrderBy(o=>o.Num).ToList();
- }
- }
- private void Page_Loaded(object sender, RoutedEventArgs e)
- {
- BatchNumRecordMinTime.SelectedDate = DateTime.Today;
- BatchNumRecordMaxTime.SelectedDate = DateTime.Today;
- }
- private void PreviousErrorBtn_Click(object sender, RoutedEventArgs e)
- {
- if (ErrorActive != null)
- {
- if(NowErrorNum-1<0)
- {
- MessageBox.Show("已经是第一粒");
- }
- else
- {
- if(NowPageError.Count>0)
- {
- int LastErrNum = NowPageError.Where(o => o.StateCode != 0).OrderBy(o => o.Num).First().Num;
- NowErrorNum = ErrorActive.FindIndex(o => o.Num == LastErrNum);
- if(NowErrorNum-1>=0) NowErrorNum--;
- ShowMessageBus.ShowBinding.HistoryImageNum = ((int)(ErrorActive[NowErrorNum].StartLine - DataStartLine) / PageHeight) + 1;
- }
- else
- {
- ShowMessageBus.ShowBinding.HistoryImageNum = ((int)(ErrorActive[NowErrorNum].StartLine - DataStartLine) / PageHeight) + 1;
- if (NowErrorNum - 1 >= 0) NowErrorNum--;
- }
- UpDateShowBinding();
- }
- }
- }
- private void NextErrorBtn_Click(object sender, RoutedEventArgs e)
- {
- if (ErrorActive != null)
- {
- if (NowErrorNum+1 >= ErrorActive.Count)
- {
- MessageBox.Show("已经是最后一粒");
- }
- else
- {
- if (NowPageError.Count > 0)
- {
- int LastErrNum = NowPageError.Where(o => o.StateCode != 0).OrderBy(o => o.Num).Last().Num;
- NowErrorNum = ErrorActive.FindIndex(o => o.Num == LastErrNum);
- if (NowErrorNum + 1 <= ErrorActive.Count - 1) NowErrorNum++;
- ShowMessageBus.ShowBinding.HistoryImageNum = ((int)(ErrorActive[NowErrorNum].StartLine - DataStartLine) / PageHeight) + 1;
- }
- else
- {
- ShowMessageBus.ShowBinding.HistoryImageNum = ((int)(ErrorActive[NowErrorNum].StartLine - DataStartLine) / PageHeight) + 1;
- if (NowErrorNum + 1 <= ErrorActive.Count - 1) NowErrorNum++;
- }
- UpDateShowBinding();
- }
- }
- }
- }
- }
|