using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Data.SqlClient; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; using WPFWCSDemo.Utilities; using System.Windows; using WPFWCSDemo.StateCode; using Serilog; using WPFWCSDemo.Models.Tables; using WPFWCSDemo.Data; namespace WPFWCSDemo.ViewModels { public partial class AlarmHistoryViewModel:ObservableObject { public AlarmHistoryViewModel() { AlarmHistory = new ObservableCollection(); ColumnList = new ObservableCollection(); columnDic = new Dictionary(); Pages = new ObservableCollection(); DateStart = DateTime.Now.AddDays(-1).ToString(TimeFormat.stringFormatDateOnly); TimeStart = DateTime.Now.AddDays(-1).ToString("HH:mm"); DateEnd = DateTime.Now.ToString(TimeFormat.stringFormatDateOnly); TimeEnd = DateTime.Now.ToString("HH:mm"); LoadAlarmHistory(1); LoadColumnName(); PageInput = 1; PageCurrent = 1; PageInfo = $"当前 {PageCurrent} 页"; } /// /// false-表示默认表数据集 true-表示执行查询操作后的表数据集 /// bool b; /// /// 历史表数据 /// [ObservableProperty] ObservableCollection _alarmHistory; /// /// 起始日期 /// [ObservableProperty] string _dateStart; /// /// 起始时间 /// [ObservableProperty] string _timeStart; /// /// 结束日期 /// [ObservableProperty] string _dateEnd; /// /// 结束时间 /// [ObservableProperty] string _timeEnd; /// /// 报警级别选中项 /// [ObservableProperty] int _alarmLevelSelectedIndex; /// /// 报警级别选中项 /// [ObservableProperty] int _alarmLevelSelectedItem; string alarmLevel; /// /// 查询字段名 /// [ObservableProperty] string _columnName; /// /// 查询关键词 /// [ObservableProperty] string _keywords; /// /// 查询字段选择项集合 /// [ObservableProperty] ObservableCollection _columnList; /// /// 查询字段名 /// Dictionary columnDic; /// /// 显示表数据 /// /// 页数 void LoadAlarmHistory(int page) { b = false; using var context = new AppDbContext(); int dtCount = context.Set() .OrderByDescending(t => t.End_Time) .Count(); //var alarmHistories = context.Set() // .OrderByDescending(t => t.End_Time) // .Skip((page - 1) * countPerPage) // .Take(countPerPage) // .ToList(); //AlarmHistory.Clear(); //foreach (AlarmHistory a in alarmHistories) //{ // AlarmHistory.Add(a); //} DataTable? dt = SqlHelper.ExecuteTable("SELECT POINT_ID,DESCRIPTION,PRIORITY,DEVICE_ID,GEN_TIME,END_TIME FROM ALARM_LOG ORDER BY END_TIME DESC OFFSET @Rows ROW FETCH NEXT 10 ROW ONLY", new SqlParameter("@Rows", page - 1)); var datas = dt.Rows; //遍历表中每行数据并初始化值 foreach (DataRow data in datas) { try { AlarmHistory a = new AlarmHistory(); a.Point_Id = data["Point_Id"].ToString(); a.Description = data["Description"].ToString(); a.Priority = data["Priority"].ToString(); a.Device_Id = data["Device_Id"].ToString(); a.Gen_Time = Convert.ToDateTime(data["Gen_Time"]); a.End_Time = Convert.ToDateTime(data["End_Time"]); AlarmHistory.Add(a); } catch (Exception) { } } UpdatePageInfo(dtCount, page); } void LoadAlarmHistory(DataTable dt) { AlarmHistory.Clear(); var datas = dt.Rows; //遍历表中每行数据并初始化值 foreach (DataRow data in datas) { AlarmHistory a = new AlarmHistory(); a.Point_Id = data["Point_Id"].ToString(); a.Description = data["Description"].ToString(); a.Priority = data["Priority"].ToString(); a.Device_Id = data["Device_Id"].ToString(); a.Gen_Time = Convert.ToDateTime(data["Gen_Time"]); a.End_Time = Convert.ToDateTime(data["End_Time"]); AlarmHistory.Add(a); } } /// /// 加载可选的搜索字段 /// void LoadColumnName() { //下拉框选项填充 ColumnList.Clear(); ColumnList.Add("报警名称"); ColumnList.Add("报警信息"); ColumnList.Add("优先级"); ColumnList.Add("设备类别"); ColumnList.Add("生成时间"); ColumnList.Add("结束时间"); //列名映射 columnDic.Clear(); columnDic.Add("报警名称", "Point_Id"); columnDic.Add("报警信息", "Description"); columnDic.Add("优先级", "Priority"); columnDic.Add("设备类别", "Device_Id"); columnDic.Add("生成时间", "Gen_Time"); columnDic.Add("结束时间", "End_Time"); } [RelayCommand] void AlarmLevelSelectItemChanged() { DataTable? dt; if (AlarmLevelSelectedIndex == 0) alarmLevel = "HIGH"; if (AlarmLevelSelectedIndex == 1) alarmLevel = "MEDIUM"; if (AlarmLevelSelectedIndex == 2) alarmLevel = "LOW"; if (string.IsNullOrEmpty(Keywords)) { dt = SqlHelper.ExecuteTable( "SELECT POINT_ID,DESCRIPTION,PRIORITY,DEVICE_ID,GEN_TIME,END_TIME FROM ALARM_LOG WHERE PRIORITY=@Priority", new SqlParameter("@Priority", alarmLevel)); } else { dt = SqlHelper.ExecuteTable( "SELECT POINT_ID,DESCRIPTION,PRIORITY,DEVICE_ID,GEN_TIME,END_TIME FROM ALARM_LOG WHERE PRIORITY=@Priority AND DESCRIPTION LIKE @Keywords", new SqlParameter("@Priority", alarmLevel), new SqlParameter("@Keywords", $"%{Keywords}%"));//此处代表如果未填写关键词则忽略该条件 } var datas = dt.Rows; AlarmHistory.Clear(); //遍历表中每行数据并初始化值 foreach (DataRow data in datas) { try { AlarmHistory a = new AlarmHistory(); a.Point_Id = data["Point_Id"].ToString(); a.Description = data["Description"].ToString(); a.Priority = data["Priority"].ToString(); a.Device_Id = data["Device_Id"].ToString(); a.Gen_Time = Convert.ToDateTime(data["Gen_Time"]); //a.Reset_Time = data["Reset_Time"].ToString(); a.End_Time = Convert.ToDateTime(data["End_Time"]); AlarmHistory.Add(a); } catch { } } } /// /// 查询 /// [RelayCommand] void Query(string num) { b = true; AlarmHistory.Clear(); DataTable? dt; DataTable? dtCount; using var context = new AppDbContext(); //int dataCount; if (!DateStringFormat()) { return; } try { if (!string.IsNullOrEmpty(ColumnName) && !string.IsNullOrEmpty(Keywords)) { //dataCount = context.Set() // .Where(a => a.Description.Contains(Keywords) && a.End_Time >= strDateStartNew) // .Count(); dtCount = SqlHelper.ExecuteTable( $"SELECT * FROM ALARM_LOG WHERE DESCRIPTION like @Keywords AND END_TIME>=@StartTime AND END_TIME<@End_Time ORDER BY End_Time DESC", new SqlParameter("@Keywords", $"%{Keywords}%"), new SqlParameter("@StartTime", dateTimeStart), new SqlParameter("@End_Time", dateTimeEnd) ); dt = SqlHelper.ExecuteTable( $"SELECT * FROM ALARM_LOG WHERE DESCRIPTION like @Keywords AND END_TIME>=@StartTime AND END_TIME<@End_Time ORDER BY End_Time DESC OFFSET @Rows ROW FETCH NEXT 10 ROW ONLY", new SqlParameter("@Keywords", $"%{Keywords}%"), new SqlParameter("@StartTime", dateTimeStart), new SqlParameter("@End_Time", dateTimeEnd), new SqlParameter("@Rows", int.Parse(num) - 1) ); } else { dtCount = SqlHelper.ExecuteTable( $"SELECT * FROM ALARM_LOG WHERE END_TIME>=@StartTime AND End_Time<@End_Time ORDER BY End_Time DESC", new SqlParameter("@StartTime", dateTimeStart), new SqlParameter("@End_Time", dateTimeEnd) ); dt = SqlHelper.ExecuteTable( $"SELECT * FROM ALARM_LOG WHERE END_TIME>=@StartTime AND End_Time<@End_Time ORDER BY End_Time DESC OFFSET @Rows ROW FETCH NEXT 10 ROW ONLY", new SqlParameter("@StartTime", dateTimeStart), new SqlParameter("@End_Time", dateTimeEnd), new SqlParameter("@Rows", int.Parse(num) - 1) ); } LoadAlarmHistory(dt); UpdatePageInfo(dtCount, num); } catch (Exception) { } } /// /// 重置选择 /// [RelayCommand] void Clear() { Keywords = string.Empty; AlarmHistory.Clear(); LoadAlarmHistory(1); } //---------------------------------时间字符串格式化对象--------------------------------- DateTime dateTimeStart; DateTime dateTimeEnd; /// /// 日期格式处理 /// bool DateStringFormat() { //处理字符串格式,规范字符串类型的时间值 bool b = DateTime.TryParse($"{DateStart} {TimeStart}", out dateTimeStart); bool b1 = DateTime.TryParse($"{DateEnd} {TimeEnd}", out dateTimeEnd); if (!b || !b1) { MessageBox.Show("时间格式错误!"); return false; } return true; } //-----------------------------------------页面跳转/统计相关----------------------------------------- //-----------------------------------------页面跳转/统计相关----------------------------------------- /// /// 每页条数 /// const int countPerPage = 12; /// /// 总数据条数-显示文本 /// [ObservableProperty] string _dataCount; /// /// 查询后的总条数 /// [ObservableProperty] int _dataCountNumber; /// /// 总页数 /// [ObservableProperty] int _pageCount; /// /// 手动输入页数 /// [ObservableProperty] int _pageInput; /// /// 鼠标需要点击的页面跳转按钮值 /// [ObservableProperty] int _pageSelected; /// /// 要显示页码的集合 /// [ObservableProperty] ObservableCollection _pages; /// /// 当前页 /// [ObservableProperty] int _pageCurrent; /// /// 当前页信息-显示文本 /// [ObservableProperty] string _pageInfo; /// /// 点击页码至指定页 /// [RelayCommand] void PageClick(string pageNumber) { JumpToPage(int.Parse(pageNumber)); //MessageBox.Show(pageNumber.ToString()); } /// /// 动态更新页数-下方显示具体X-X页 /// void DynamicPage() { //设置最多显示5页按钮 Pages.Clear(); //总页数小于8-显示1-X页 if (PageSelected < 8) { for (int i = 1; i <= PageCount; i++) { Pages.Add(i.ToString()); } } //总页数大于8 else { //距离尾页是否多于3页 if (PageCount - PageSelected >= 3) { //显示当前页的前3和后3页码 if (PageCount > 7) { for (int i = PageSelected - 3; i <= PageSelected + 3; i++) { Pages.Add(i.ToString()); } } else//7页内显示全部 { for (int i = 1; i <= PageCount; i++) { Pages.Add(i.ToString()); } } } //距离尾页是否少于3页 else { if (PageCount - PageSelected == 2) { for (int i = PageSelected - 4; i <= PageCount; i++) { Pages.Add(i.ToString()); } } if (PageCount - PageSelected == 1) { for (int i = PageSelected - 5; i <= PageCount; i++) { Pages.Add(i.ToString()); } } if (PageCount == PageSelected) { for (int i = PageSelected - 6; i <= PageCount; i++) { Pages.Add(i.ToString()); } } } } } /// /// 获取数据集的总条数和页码数,更新属性 /// /// 总数据条数 /// 当前页 void UpdatePageInfo(int dataCount, int pageCurrent) { //总数据条数 DataCountNumber = dataCount; //文本显示 DataCount = $"共 {dataCount} 条"; //总页数 if (DataCountNumber % countPerPage == 0) { PageCount = DataCountNumber / countPerPage; } else { PageCount = DataCountNumber / countPerPage + 1; } PageCurrent = pageCurrent; DynamicPage(); } void UpdatePageInfo(DataTable dataCount, string pageCurrent) { //总数据条数 DataCountNumber = dataCount.Rows.Count; //文本显示 DataCount = $"共 {DataCountNumber} 条"; //总页数 if (DataCountNumber % countPerPage == 0) { PageCount = DataCountNumber / countPerPage; } else { PageCount = DataCountNumber / countPerPage + 1; } PageCurrent = int.Parse(pageCurrent); DynamicPage(); } //********************************************跳转页码时查询要附加顶部查询条件获取共同查询结果显示******************************************* //********************************************跳转页码时查询要附加顶部查询条件获取共同查询结果显示******************************************* //********************************************跳转页码时查询要附加顶部查询条件获取共同查询结果显示******************************************* /// /// 跳转至指定页 /// [RelayCommand] void JumpPageClick(string pageNumber) { try { if (int.Parse(pageNumber) > PageCount) { MessageBox.Show("不能超过最大页码数!"); return; } if (int.Parse(pageNumber) < 1) { MessageBox.Show("请使用正确页码数查询!"); return; } JumpToPage(int.Parse(pageNumber)); } catch (Exception) { Log.Warning("【瞎β操作】查询历史记录时,跳转页面输入错误!"); } } /// /// 前页 /// [RelayCommand] void PageBefore() { if (PageCurrent == 1) return; PageCurrent -= 1; JumpToPage(PageCurrent); PageInfo = $"当前 {PageCurrent} 页"; } /// /// 后一页 /// [RelayCommand] void PageNext() { if (PageCurrent == PageCount) return; PageCurrent += 1; JumpToPage(PageCurrent); PageInfo = $"当前 {PageCurrent} 页"; } /// /// 首页 /// [RelayCommand] void PageFirst() { PageCurrent = 1; JumpToPage(PageCurrent); PageInfo = $"当前 {PageCurrent} 页"; } /// /// 尾页 /// [RelayCommand] void PageLast() { if (PageCurrent == PageCount) return; JumpToPage(PageCount); PageInfo = $"当前 {PageCurrent} 页"; } /// /// 跳转到指定页 /// /// void JumpToPage(int pageNumber) { //获取指定页数从具体第几条数据开始计数 int index = (pageNumber - 1) * 10 + 1; if (b == false) { //默认数据集条件下跳转 LoadAlarmHistory(index); } else { //查询之后的数据集条件下跳转 Query(index.ToString()); } if (pageNumber <= PageCount) { PageCurrent = pageNumber; PageInfo = $"当前 {pageNumber} 页"; } } } }