679 lines
22 KiB
C#
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} 页";
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|