Files
FT479/WPFWCSDemo/ViewModels/TaskHistoryViewModel.cs
2026-07-07 14:00:05 +08:00

679 lines
22 KiB
C#

using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using Microsoft.Identity.Client.NativeInterop;
using Serilog;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using WPFWCSDemo.Data;
using WPFWCSDemo.Models.Tables;
using WPFWCSDemo.StateCode;
using WPFWCSDemo.Utilities;
namespace WPFWCSDemo.ViewModels
{
public partial class TaskHistoryViewModel : ObservableObject
{
public TaskHistoryViewModel()
{
TaskHistory = new ObservableCollection<TaskHistory>();
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");
LoadTaskHistory(1);
LoadColumnName();
PageInput = 1;
PageCurrent = 1;
PageInfo = $"当前 {PageCurrent} 页";
DynamicPage(PageCurrent);
}
/// <summary>
/// false-表示默认表数据集 true-表示查询后的表数据集
/// </summary>
bool b;
/// <summary>
/// 历史表数据
/// </summary>
[ObservableProperty]
ObservableCollection<TaskHistory> _taskHistory;
/// <summary>
/// 起始日期
/// </summary>
[ObservableProperty]
string? _dateStart;
/// <summary>
/// 起始时间
/// </summary>
[ObservableProperty]
string? _timeStart;
/// <summary>
/// 结束日期
/// </summary>
[ObservableProperty]
string? _dateEnd;
/// <summary>
/// 结束时间
/// </summary>
[ObservableProperty]
string? _timeEnd;
/// <summary>
/// 默认值-起始日期
/// </summary>
[ObservableProperty]
string? _txtDateStart;
/// <summary>
/// 默认值-起始时间
/// </summary>
[ObservableProperty]
string? _txtTimeStart;
/// <summary>
/// 默认值-结束日期
/// </summary>
[ObservableProperty]
string? _txtDateEnd;
/// <summary>
/// 默认值-结束时间
/// </summary>
[ObservableProperty]
string? _txtTimeEnd;
/// <summary>
/// 查询字段选择项集合
/// </summary>
[ObservableProperty]
ObservableCollection<string> _columnList = new ObservableCollection<string>();
/// <summary>
/// 查询字段名
/// </summary>
[ObservableProperty]
string _columnName;
/// <summary>
/// 查询字段名
/// </summary>
Dictionary<string, string> columnDic = new Dictionary<string, string>();
/// <summary>
/// 查询关键词
/// </summary>
[ObservableProperty]
string _keywords;
/// <summary>
/// 加载/重载表数据
/// </summary>
/// <param name="page">页数</param>
void LoadTaskHistory(int page)
{
b = false;
TaskHistory.Clear();
//using var context = new AppDbContext();
DataTable? dtCount = SqlHelper.ExecuteTable("SELECT TOP 30000 * 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["JobId"].ToString();
//t.TaskId = data["TaskId"].ToString();
////t.PalletId = data["PalletId"].ToString();
//t.SourceLocation = data["SourceLocation"].ToString();
//t.TargetLocation = data["TargetLocation"].ToString();
//t.TaskType = data["TaskType"].ToString();
//t.TaskState = data["TaskState"].ToString();
//t.ScheduleState = data["ScheduleState"].ToString();
//t.ReportState = (int)data["ReportState"];
//t.CreateTime = data["CreateTime"].ToString();
//t.ScheduleTime = data["ScheduleTime"].ToString();
//t.FinishTime = data["FinishTime"].ToString();
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);
}
/// <summary>
/// 加载/重载表数据---指定数据集
/// </summary>
void LoadTaskHistory(DataTable dt)
{
TaskHistory.Clear();
var datas = dt.Rows;
//遍历表中每行数据并初始化值
foreach (DataRow data in datas)
{
TaskHistory t = new()
{
//JobId = data["JobId"].ToString(),
//TaskId = data["TaskId"].ToString(),
////PalletId = data["PalletId"].ToString(),
//SourceLocation = data["SourceLocation"].ToString(),
//TargetLocation = data["TargetLocation"].ToString(),
//TaskType = data["TaskType"].ToString(),
//TaskState = data["TaskState"].ToString(),
//ScheduleState = data["ScheduleState"].ToString(),
//ReportState = (int)data["ReportState"],
//CreateTime = data["CreateTime"].ToString(),
//ScheduleTime = data["ScheduleTime"].ToString(),
//FinishTime = data["FinishTime"].ToString()
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);
}
}
/// <summary>
/// 加载可选的搜索字段
/// </summary>
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("完成时间", "完成时间");
}
/// <summary>
/// 查询指令获取显示结果
/// </summary>
/// <param name="num">页数</param>
[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 WHERE @ColumnName like @Keywords AND FINISHTIME>=@StartTime AND FINISHTIME<@FinishTime ORDER BY CREATETIME DESC",
$"SELECT TOP 30000 * FROM TASK_HISTORY_VIEW WHERE {ColumnName} LIKE @Keywords AND 结束时间>=@StartTime AND 结束时间<@FinishTime ORDER BY 结束时间 DESC",
//new SqlParameter("@ColumnName", ColumnName),
new SqlParameter("@Keywords", $"%{Keywords.Trim()}%"),
new SqlParameter("@StartTime", dateTimeStart),
new SqlParameter("@FinishTime", dateTimeEnd)
);
dt = SqlHelper.ExecuteTable(
//$"SELECT * FROM TASK_HISTORY WHERE @ColumnName like @Keywords AND FINISHTIME>=@StartTime AND FINISHTIME<@FinishTime ORDER BY CREATETIME DESC OFFSET @Rows ROW FETCH NEXT 10 ROW ONLY",
$"SELECT * FROM TASK_HISTORY_VIEW WHERE {ColumnName} LIKE @Keywords AND 结束时间>=@StartTime AND 结束时间<@FinishTime ORDER BY 结束时间 DESC OFFSET @Rows ROW FETCH NEXT 10 ROW ONLY",
//new SqlParameter("@ColumnName", ColumnName),
new SqlParameter("@Keywords", $"%{Keywords.Trim()}%"),
new SqlParameter("@StartTime", dateTimeStart),
new SqlParameter("@FinishTime", dateTimeEnd),
new SqlParameter("@Rows", int.Parse(num) - 1)
);
}
else
{
dtCount = SqlHelper.ExecuteTable(
//$"SELECT * FROM TASK_HISTORY WHERE FINISHTIME>=@StartTime AND FINISHTIME<@FinishTime ORDER BY CREATETIME DESC",
$"SELECT TOP 30000 * FROM TASK_HISTORY_VIEW WHERE 结束时间>=@StartTime AND 结束时间<@FinishTime ORDER BY 结束时间 DESC",
new SqlParameter("@StartTime", dateTimeStart),
new SqlParameter("@FinishTime", dateTimeEnd)
);
dt = SqlHelper.ExecuteTable(
//$"SELECT * FROM TASK_HISTORY WHERE FINISHTIME>=@StartTime AND FINISHTIME<@FinishTime ORDER BY CREATETIME DESC OFFSET @Rows ROW FETCH NEXT 10 ROW ONLY",
$"SELECT * FROM TASK_HISTORY_VIEW WHERE 结束时间>=@StartTime AND 结束时间<@FinishTime ORDER BY 结束时间 DESC OFFSET @Rows ROW FETCH NEXT 10 ROW ONLY",
new SqlParameter("@StartTime", dateTimeStart),
new SqlParameter("@FinishTime", dateTimeEnd),
new SqlParameter("@Rows", int.Parse(num) - 1)
);
}
LoadTaskHistory(dt);
UpdatePageInfo(dtCount, num);
}
catch (Exception)
{
}
}
/// <summary>
/// 重置选择
/// </summary>
[RelayCommand]
void Clear()
{
ColumnName = string.Empty;
Keywords = string.Empty;
TaskHistory.Clear();
LoadTaskHistory(1);
}
//---------------------------------时间字符串格式化对象---------------------------------
DateTime dateTimeStart;
DateTime dateTimeEnd;
/// <summary>
/// 日期格式处理
/// </summary>
/// <returns>格式是否正确 true-正确 false-错误</returns>
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 = 10;
/// <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>
/// <param name="pageCurrent">跳转后的页数</param>
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());
}
}
}
}
}
/// <summary>
/// 获取数据集的总条数和页码数,更新属性
/// </summary>
/// <param name="dt"></param>
/// <param name="pageCurrent">当前页</param>
void UpdatePageInfo(DataTable dt, int pageCurrent)
{
//总数据条数
DataCountNumber = 30000;
//文本显示
DataCount = $"只显示最近5万条数据";
//总页数
if (DataCountNumber % countPerPage == 0)
{
PageCount = DataCountNumber / countPerPage;
}
else
{
PageCount = DataCountNumber / countPerPage + 1;
}
PageCurrent = pageCurrent;
DynamicPage(pageCurrent);
}
void UpdatePageInfo(DataTable dt, string pageCurrent)
{
//总数据条数
DataCountNumber = 30000;
//文本显示
DataCount = $"只显示最近5万条数据";
//总页数
if (DataCountNumber % countPerPage == 0)
{
PageCount = DataCountNumber / countPerPage;
}
else
{
PageCount = DataCountNumber / countPerPage + 1;
}
PageCurrent = int.Parse(pageCurrent);
DynamicPage(int.Parse(pageCurrent));
}
//********************************************跳转页码时查询要附加顶部查询条件获取共同查询结果显示*******************************************
//********************************************跳转页码时查询要附加顶部查询条件获取共同查询结果显示*******************************************
//********************************************跳转页码时查询要附加顶部查询条件获取共同查询结果显示*******************************************
/// <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)
{
//默认数据集条件下跳转
LoadTaskHistory(index);
}
else
{
//查询之后的数据集条件下跳转
Query(index.ToString());
}
if (pageNumber <= PageCount)
{
PageCurrent = pageNumber;
PageInfo = $"当前 {pageNumber} 页";
}
}
}
}