695 lines
20 KiB
C#
695 lines
20 KiB
C#
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<AlarmHistory>();
|
|
|
|
ColumnList = new ObservableCollection<string>();
|
|
|
|
columnDic = new Dictionary<string, string>();
|
|
|
|
Pages = new ObservableCollection<string>();
|
|
|
|
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} 页";
|
|
|
|
}
|
|
|
|
/// <summary>
|
|
/// false-表示默认表数据集 true-表示执行查询操作后的表数据集
|
|
/// </summary>
|
|
bool b;
|
|
|
|
/// <summary>
|
|
/// 历史表数据
|
|
/// </summary>
|
|
[ObservableProperty]
|
|
ObservableCollection<AlarmHistory> _alarmHistory;
|
|
|
|
/// <summary>
|
|
/// 起始日期
|
|
/// </summary>
|
|
[ObservableProperty]
|
|
string _dateStart;
|
|
|
|
/// <summary>
|
|
/// 起始时间
|
|
/// </summary>
|
|
[ObservableProperty]
|
|
string _timeStart;
|
|
|
|
/// <summary>
|
|
/// 结束日期
|
|
/// </summary>
|
|
[ObservableProperty]
|
|
string _dateEnd;
|
|
|
|
/// <summary>
|
|
/// 结束时间
|
|
/// </summary>
|
|
[ObservableProperty]
|
|
string _timeEnd;
|
|
|
|
/// <summary>
|
|
/// 报警级别选中项
|
|
/// </summary>
|
|
[ObservableProperty]
|
|
int _alarmLevelSelectedIndex;
|
|
/// <summary>
|
|
/// 报警级别选中项
|
|
/// </summary>
|
|
[ObservableProperty]
|
|
int _alarmLevelSelectedItem;
|
|
string alarmLevel;
|
|
|
|
/// <summary>
|
|
/// 查询字段名
|
|
/// </summary>
|
|
[ObservableProperty]
|
|
string _columnName;
|
|
|
|
/// <summary>
|
|
/// 查询关键词
|
|
/// </summary>
|
|
[ObservableProperty]
|
|
string _keywords;
|
|
|
|
/// <summary>
|
|
/// 查询字段选择项集合
|
|
/// </summary>
|
|
[ObservableProperty]
|
|
ObservableCollection<string> _columnList;
|
|
|
|
/// <summary>
|
|
/// 查询字段名
|
|
/// </summary>
|
|
Dictionary<string, string> columnDic;
|
|
|
|
|
|
/// <summary>
|
|
/// 显示表数据
|
|
/// </summary>
|
|
/// <param name="page">页数</param>
|
|
|
|
void LoadAlarmHistory(int page)
|
|
{
|
|
b = false;
|
|
|
|
using var context = new AppDbContext();
|
|
|
|
int dtCount = context.Set<AlarmHistory>()
|
|
.OrderByDescending(t => t.End_Time)
|
|
.Count();
|
|
|
|
//var alarmHistories = context.Set<AlarmHistory>()
|
|
// .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);
|
|
}
|
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 加载可选的搜索字段
|
|
/// </summary>
|
|
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
|
|
{
|
|
|
|
}
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 查询
|
|
/// </summary>
|
|
[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<AlarmHistory>()
|
|
// .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)
|
|
{
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 重置选择
|
|
/// </summary>
|
|
[RelayCommand]
|
|
void Clear()
|
|
{
|
|
Keywords = string.Empty;
|
|
|
|
AlarmHistory.Clear();
|
|
LoadAlarmHistory(1);
|
|
}
|
|
|
|
|
|
//---------------------------------时间字符串格式化对象---------------------------------
|
|
DateTime dateTimeStart;
|
|
|
|
DateTime dateTimeEnd;
|
|
|
|
/// <summary>
|
|
/// 日期格式处理
|
|
/// </summary>
|
|
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;
|
|
}
|
|
|
|
|
|
//-----------------------------------------页面跳转/统计相关-----------------------------------------
|
|
//-----------------------------------------页面跳转/统计相关-----------------------------------------
|
|
|
|
|
|
/// <summary>
|
|
/// 每页条数
|
|
/// </summary>
|
|
const int countPerPage = 12;
|
|
/// <summary>
|
|
/// 总数据条数-显示文本
|
|
/// </summary>
|
|
[ObservableProperty]
|
|
string _dataCount;
|
|
/// <summary>
|
|
/// 查询后的总条数
|
|
/// </summary>
|
|
[ObservableProperty]
|
|
int _dataCountNumber;
|
|
/// <summary>
|
|
/// 总页数
|
|
/// </summary>
|
|
[ObservableProperty]
|
|
int _pageCount;
|
|
/// <summary>
|
|
/// 手动输入页数
|
|
/// </summary>
|
|
[ObservableProperty]
|
|
int _pageInput;
|
|
/// <summary>
|
|
/// 鼠标需要点击的页面跳转按钮值
|
|
/// </summary>
|
|
[ObservableProperty]
|
|
int _pageSelected;
|
|
/// <summary>
|
|
/// 要显示页码的集合
|
|
/// </summary>
|
|
[ObservableProperty]
|
|
ObservableCollection<string> _pages;
|
|
|
|
/// <summary>
|
|
/// 当前页
|
|
/// </summary>
|
|
[ObservableProperty]
|
|
int _pageCurrent;
|
|
/// <summary>
|
|
/// 当前页信息-显示文本
|
|
/// </summary>
|
|
[ObservableProperty]
|
|
string _pageInfo;
|
|
|
|
|
|
|
|
/// <summary>
|
|
/// 点击页码至指定页
|
|
/// </summary>
|
|
[RelayCommand]
|
|
void PageClick(string pageNumber)
|
|
{
|
|
JumpToPage(int.Parse(pageNumber));
|
|
|
|
//MessageBox.Show(pageNumber.ToString());
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 动态更新页数-下方显示具体X-X页
|
|
/// </summary>
|
|
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());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 获取数据集的总条数和页码数,更新属性
|
|
/// </summary>
|
|
/// <param name="dt">总数据条数</param>
|
|
/// <param name="pageCurrent">当前页</param>
|
|
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();
|
|
}
|
|
|
|
|
|
//********************************************跳转页码时查询要附加顶部查询条件获取共同查询结果显示*******************************************
|
|
//********************************************跳转页码时查询要附加顶部查询条件获取共同查询结果显示*******************************************
|
|
//********************************************跳转页码时查询要附加顶部查询条件获取共同查询结果显示*******************************************
|
|
|
|
|
|
/// <summary>
|
|
/// 跳转至指定页
|
|
/// </summary>
|
|
[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("【瞎β操作】查询历史记录时,跳转页面输入错误!");
|
|
}
|
|
|
|
}
|
|
|
|
/// <summary>
|
|
/// 前页
|
|
/// </summary>
|
|
[RelayCommand]
|
|
void PageBefore()
|
|
{
|
|
if (PageCurrent == 1) return;
|
|
|
|
PageCurrent -= 1;
|
|
|
|
JumpToPage(PageCurrent);
|
|
|
|
PageInfo = $"当前 {PageCurrent} 页";
|
|
}
|
|
|
|
/// <summary>
|
|
/// 后一页
|
|
/// </summary>
|
|
[RelayCommand]
|
|
void PageNext()
|
|
{
|
|
if (PageCurrent == PageCount) return;
|
|
|
|
PageCurrent += 1;
|
|
|
|
JumpToPage(PageCurrent);
|
|
|
|
|
|
PageInfo = $"当前 {PageCurrent} 页";
|
|
}
|
|
|
|
/// <summary>
|
|
/// 首页
|
|
/// </summary>
|
|
[RelayCommand]
|
|
void PageFirst()
|
|
{
|
|
PageCurrent = 1;
|
|
|
|
JumpToPage(PageCurrent);
|
|
|
|
PageInfo = $"当前 {PageCurrent} 页";
|
|
}
|
|
|
|
/// <summary>
|
|
/// 尾页
|
|
/// </summary>
|
|
[RelayCommand]
|
|
void PageLast()
|
|
{
|
|
if (PageCurrent == PageCount) return;
|
|
|
|
JumpToPage(PageCount);
|
|
|
|
PageInfo = $"当前 {PageCurrent} 页";
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 跳转到指定页
|
|
/// </summary>
|
|
/// <param name="pageNumber"></param>
|
|
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} 页";
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
}
|