using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; using Microsoft.EntityFrameworkCore.Metadata.Internal; using Serilog; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Data; using System.Data.SqlClient; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using WPFWCSDemo.Models.Tables; using WPFWCSDemo.StateCode; using WPFWCSDemo.Utilities; namespace WPFWCSDemo.ViewModels.DbViews { public partial class TaskHistoryDbViewModel : ObservableObject { public TaskHistoryDbViewModel() { TaskHistory = new ObservableCollection(); 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"); LoadTaskHistory(1); LoadColumnName(); PageInput = 1; PageCurrent = 1; PageInfo = $"当前 {PageCurrent} 页"; DynamicPage(PageCurrent); } /// /// false-表示默认表数据集 true-表示查询后的表数据集 /// bool b; /// /// 历史表数据 /// [ObservableProperty] ObservableCollection _taskHistory; /// /// 起始日期 /// [ObservableProperty] string? _dateStart; /// /// 起始时间 /// [ObservableProperty] string? _timeStart; /// /// 结束日期 /// [ObservableProperty] string? _dateEnd; /// /// 结束时间 /// [ObservableProperty] string? _timeEnd; /// /// 默认值-起始日期 /// [ObservableProperty] string? _txtDateStart; /// /// 默认值-起始时间 /// [ObservableProperty] string? _txtTimeStart; /// /// 默认值-结束日期 /// [ObservableProperty] string? _txtDateEnd; /// /// 默认值-结束时间 /// [ObservableProperty] string? _txtTimeEnd; /// /// 查询字段选择项集合 /// [ObservableProperty] ObservableCollection _columnList = new ObservableCollection(); /// /// 查询字段名 /// [ObservableProperty] string _columnName; /// /// 查询字段名 /// Dictionary columnDic = new Dictionary(); /// /// 查询关键词 /// [ObservableProperty] string _keywords; /// /// 加载/重载表数据 /// /// 页数 void LoadTaskHistory(int page) { b = false; TaskHistory.Clear(); DataTable? dtCount = SqlHelper.ExecuteTable("SELECT * FROM TASK_HISTORY_VIEW ORDER BY 结束时间 DESC"); DataTable? dt = SqlHelper.ExecuteTable("SELECT * FROM TASK_HISTORY_VIEW ORDER BY 结束时间 DESC OFFSET @Rows ROW FETCH NEXT 10 ROW ONLY", new SqlParameter("@Rows", page - 1)); var datas = dt.Rows; //遍历表中每行数据并初始化值 foreach (DataRow data in datas) { TaskHistory t = new TaskHistory(); t.JobId = data["环穿编号"].ToString(); t.TaskId = data["任务号"].ToString(); //t.PalletId = data["PalletId"].ToString(); t.SourceLocation = data["源站点"].ToString(); t.TargetLocation = data["目标站点"].ToString(); t.TaskType = data["任务类型"].ToString(); t.TaskState = data["任务状态"].ToString(); t.ScheduleState = data["调度状态"].ToString(); //t.ReportState = data["取货状态"].ToString(); t.CreateTime = Convert.ToDateTime(data["生成时间"]); t.ScheduleTime = Convert.ToDateTime(data["调度时间"]); t.FinishTime = Convert.ToDateTime(data["结束时间"]); //数据结果 TaskHistory.Add(t); } UpdatePageInfo(dtCount, page); } /// /// 加载/重载表数据---指定数据集 /// void LoadTaskHistory(DataTable dt) { TaskHistory.Clear(); var datas = dt.Rows; //遍历表中每行数据并初始化值 foreach (DataRow data in datas) { TaskHistory t = new() { JobId = data["环穿编号"].ToString(), TaskId = data["任务号"].ToString(), //t.PalletId = data["PalletId"].ToString(), SourceLocation = data["源站点"].ToString(), TargetLocation = data["目标站点"].ToString(), TaskType = data["任务类型"].ToString(), TaskState = data["任务状态"].ToString(), ScheduleState = data["调度状态"].ToString(), //ReportState = data["取货状态"].ToString(), CreateTime = Convert.ToDateTime(data["生成时间"]), ScheduleTime = Convert.ToDateTime(data["调度时间"]), FinishTime = Convert.ToDateTime(data["结束时间"]), }; //数据结果 TaskHistory.Add(t); } } /// /// 加载可选的搜索字段 /// void LoadColumnName() { //下拉框选项填充 ColumnList.Clear(); ColumnList.Add("环穿编号"); ColumnList.Add("任务号"); //ColumnList.Add("托盘号"); ColumnList.Add("任务类型"); ColumnList.Add("源站点"); ColumnList.Add("目标站点"); ColumnList.Add("任务状态"); ColumnList.Add("生成时间"); ColumnList.Add("调度时间"); ColumnList.Add("完成时间"); //列名映射 columnDic.Clear(); columnDic.Add("环穿编号", "环穿编号"); columnDic.Add("任务号", "任务号"); //columnDic.Add("托盘号", "PalletId"); columnDic.Add("任务类型", "任务类型"); columnDic.Add("源站点", "源站点"); columnDic.Add("目标站点", "目标站点"); columnDic.Add("任务状态", "任务状态"); columnDic.Add("生成时间", "生成时间"); columnDic.Add("调度时间", "调度时间"); columnDic.Add("完成时间", "完成时间"); } /// /// 查询指令获取显示结果 /// /// 页数 [RelayCommand] void Query(string num) { b = true; TaskHistory.Clear(); DataTable? dt; DataTable? dtCount; if (!DateStringFormat()) { return; } try { //搜索条件为空或其他 if (!string.IsNullOrEmpty(ColumnName) && !string.IsNullOrEmpty(Keywords.Trim())) { dtCount = SqlHelper.ExecuteTable( $"SELECT * FROM TASK_HISTORY_VIEW WHERE {ColumnName} LIKE @Keywords AND 结束时间>=@FinishTime1 AND 结束时间<@FinishTime2 ORDER BY 结束时间 DESC", new SqlParameter("@Keywords", $"%{Keywords.Trim()}%"), new SqlParameter("@FinishTime1", dateTimeStart), new SqlParameter("@FinishTime2", dateTimeEnd) ); dt = SqlHelper.ExecuteTable( $"SELECT * FROM TASK_HISTORY_VIEW WHERE {ColumnName} LIKE @Keywords AND 结束时间>=@FinishTime1 AND 结束时间<@FinishTime2 ORDER BY 结束时间 DESC OFFSET @Rows ROW FETCH NEXT 10 ROW ONLY", new SqlParameter("@Keywords", $"%{Keywords.Trim()}%"), new SqlParameter("@FinishTime1", dateTimeStart), new SqlParameter("@FinishTime2", dateTimeEnd), new SqlParameter("@Rows", int.Parse(num) - 1) ); } else { dtCount = SqlHelper.ExecuteTable( $"SELECT * FROM TASK_HISTORY_VIEW WHERE 结束时间>=@FinishTime1 AND 结束时间<@FinishTime2 ORDER BY 结束时间 DESC", new SqlParameter("@FinishTime1", dateTimeStart), new SqlParameter("@FinishTime2", dateTimeEnd) ); dt = SqlHelper.ExecuteTable( $"SELECT * FROM TASK_HISTORY_VIEW WHERE 结束时间>=@FinishTime1 AND 结束时间<@FinishTime2 ORDER BY 结束时间 DESC OFFSET @Rows ROW FETCH NEXT 10 ROW ONLY", new SqlParameter("@FinishTime1", dateTimeStart), new SqlParameter("@FinishTime2", dateTimeEnd), new SqlParameter("@Rows", int.Parse(num) - 1) ); } LoadTaskHistory(dt); UpdatePageInfo(dtCount, num); } catch (Exception) { } } /// /// 重置选择 /// [RelayCommand] void Clear() { ColumnName = string.Empty; Keywords = string.Empty; TaskHistory.Clear(); LoadTaskHistory(1); } //---------------------------------时间字符串格式化对象--------------------------------- DateTime dateTimeStart; DateTime dateTimeEnd; /// /// 日期格式处理 /// /// 格式是否正确 true-正确 false-错误 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 = 10; /// /// 总数据条数-显示文本 /// [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(int pageCurrent) { //设置最多显示5页按钮 Pages.Clear(); //总页数小于8-显示1-X页 if (PageCount < 8 && pageCurrent < 8) { for (int i = 1; i < PageCount; i++) { Pages.Add(i.ToString()); } } //总页数大于等于8 else { //距离尾页多于3页 if (PageCount - pageCurrent >= 3) { //1---显示前7页 if (pageCurrent < 8) { for (int i = 1; i < 8; i++) { Pages.Add(i.ToString()); } } else { //显示当前页的前3和后3页码 for (int i = pageCurrent - 3; i <= pageCurrent + 3; i++) { Pages.Add(i.ToString()); } } } //距离尾页是否少于3页---显示尾页前7页 else { if (PageCount - pageCurrent <= 2) { for (int i = PageCount - 6; i <= PageCount; i++) { Pages.Add(i.ToString()); } } } } } /// /// 获取数据集的总条数和页码数,更新属性 /// /// /// 当前页 void UpdatePageInfo(DataTable dt, int pageCurrent) { //总数据条数 DataCountNumber = dt.Rows.Count; //文本显示 DataCount = $"共 {DataCountNumber} 条"; //总页数 if (DataCountNumber % countPerPage == 0) { PageCount = DataCountNumber / countPerPage; } else { PageCount = DataCountNumber / countPerPage + 1; } PageCurrent = pageCurrent; DynamicPage(pageCurrent); } void UpdatePageInfo(DataTable dt, string pageCurrent) { //总数据条数 DataCountNumber = dt.Rows.Count; //文本显示 DataCount = $"共 {DataCountNumber} 条"; //总页数 if (DataCountNumber % countPerPage == 0) { PageCount = DataCountNumber / countPerPage; } else { PageCount = DataCountNumber / countPerPage + 1; } PageCurrent = int.Parse(pageCurrent); DynamicPage(int.Parse(pageCurrent)); } //********************************************跳转页码时查询要附加顶部查询条件获取共同查询结果显示******************************************* //********************************************跳转页码时查询要附加顶部查询条件获取共同查询结果显示******************************************* //********************************************跳转页码时查询要附加顶部查询条件获取共同查询结果显示******************************************* /// /// 跳转至指定页 /// [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) { //默认数据集条件下跳转 LoadTaskHistory(index); } else { //查询之后的数据集条件下跳转 Query(index.ToString()); } if (pageNumber <= PageCount) { PageCurrent = pageNumber; PageInfo = $"当前 {pageNumber} 页"; } } } }