添加项目文件。

This commit is contained in:
Administrator
2026-06-29 14:46:32 +08:00
parent 9a9c508618
commit d9e0324b1d
175 changed files with 17983 additions and 0 deletions

View File

@@ -0,0 +1,772 @@
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using Microsoft.EntityFrameworkCore;
using Newtonsoft.Json;
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 System.Windows.Threading;
using WPFWCSDemo.Common;
using WPFWCSDemo.Data;
using WPFWCSDemo.Models.Devices.CircleRGVStation;
using WPFWCSDemo.Models.Tables;
using WPFWCSDemo.StateCode;
using WPFWCSDemo.Utilities;
using WPFWCSDemo.Utilities.Table;
using WPFWCSDemo.Views.CustomComponent;
namespace WPFWCSDemo.ViewModels.DbViews
{
public partial class TaskDbViewModel : ObservableObject
{
/// <summary>
/// 用于实时更新任务表的定时器
/// </summary>
private DispatcherTimer dispatcherTimer;
public TaskDbViewModel()
{
TaskView = new ObservableCollection<TaskView>();
ColumnList = new List<string>();
col = new Dictionary<string, string>();
SourceLocations = new List<int>();
TargetLocations = new List<int>();
RGVNumbers = new List<int>();
LoadTaskGrid();
LoadColumns();
LocationInitialize();
//Task.Run(() => LoadTaskGridAsync());
b = true;
// 设置定时器属性
dispatcherTimer = new DispatcherTimer();
dispatcherTimer.Interval = TimeSpan.FromSeconds(5); // 设置时间间隔
dispatcherTimer.Tick += DispatcherTimer_Tick; // 添加事件处理程序
dispatcherTimer.Start(); // 启动计时器
}
//调度任务表刷新参数
private void DispatcherTimer_Tick(object? sender, EventArgs e)
{
if (b)
{
LoadTaskGrid();
}
}
/// <summary>
/// 是否更新任务表的标志
/// </summary>
bool b;
/// <summary>
/// 调度任务字段---原数据/视图数据
/// </summary>
[ObservableProperty]
ObservableCollection<TaskView> _taskView;
/// <summary>
/// 搜索关键字
/// </summary>
[ObservableProperty]
string? _keywords;
/// <summary>
/// 筛选列表集合
/// </summary>
[ObservableProperty]
List<string> _columnList;
/// <summary>
/// 筛选列表集合对应的查询字段
/// </summary>
Dictionary<string, string> col;
/// <summary>
/// 筛选列表文本
/// </summary>
[ObservableProperty]
string? _columnName;
/// <summary>
/// 筛选列表文本选择项
/// </summary>
[ObservableProperty]
string? _columnNameSelected;
/// <summary>
/// 筛选列表选项
/// </summary>
[ObservableProperty]
int _taskTypeSelectedIndex;
/// <summary>
/// 右侧对话框弹出属性
/// </summary>
[ObservableProperty]
bool _isRightDrawerOpen;
/// <summary>
/// 顶部对话框弹出属性
/// </summary>
[ObservableProperty]
bool _isTopDrawerOpen;
/// <summary>
/// 站点初始化集合
/// </summary>
[ObservableProperty]
int _rowCount;
[ObservableProperty]
int _columnCount;
[ObservableProperty]
int _floorCount;
[ObservableProperty]
List<int> _rows;
[ObservableProperty]
List<int> _columns;
[ObservableProperty]
List<int> _floors;
/// <summary>
/// 取放货站点集合
/// </summary>
[ObservableProperty]
List<int> _sourceLocations;
[ObservableProperty]
List<int> _targetLocations;
/// <summary>
/// 测试下发界面任务类型
/// </summary>
[ObservableProperty]
int _testingTaskTypeIndex;
/// <summary>
/// 任务类型
/// </summary>
[ObservableProperty]
int _selectedTaskTypeIndex;
/// <summary>
/// 输入托盘号
/// </summary>
[ObservableProperty]
string _inputTaskId;
/// <summary>
/// 取货站点
/// </summary>
[ObservableProperty]
int _selectedSourceLocation;
/// <summary>
/// 放货站点
/// </summary>
[ObservableProperty]
int _selectedTargetLocation;
/// <summary>
/// 小车编号集合
/// </summary>
[ObservableProperty]
List<int> _rGVNumbers;
/// <summary>
/// 选中小车编号
/// </summary>
[ObservableProperty]
int _selectedRGVNumber;
/// <summary>
/// 右侧对话框弹出命令
/// </summary>
[RelayCommand]
private void NewTask()
{
IsRightDrawerOpen = true;
}
/// <summary>
/// 顶部对话框弹出命令---堆垛机测试
/// </summary>
[RelayCommand]
private void StackerTesting()
{
IsTopDrawerOpen = true;
}
/// <summary>
/// 更改任务类型选项直接更新表
/// </summary>
//[RelayCommand]
void TaskTypeSelectItemChanged()
{
//------------------------------------------------------------------视图-----------------------------------------------------------------
//------------------------------------------------------------------视图-----------------------------------------------------------------
//------------------------------------------------------------------视图-----------------------------------------------------------------
DataTable? dtView;
if (TaskTypeSelectedIndex == 1)
{
dtView = SqlHelper.ExecuteTable("SELECT * FROM TASK_VIEW WHERE 任务类型 LIKE @TaskType ORDER BY 生成时间 DESC",
new SqlParameter("@TaskType", TaskTypeSelectedIndex + "%"));
}
else if (TaskTypeSelectedIndex == 2)
{
dtView = SqlHelper.ExecuteTable("SELECT * FROM TASK_VIEW WHERE 任务类型<>@TaskType ORDER BY 生成时间 DESC",
new SqlParameter("@TaskType", 1));
}
else
{
dtView = SqlHelper.ExecuteTable("SELECT * FROM TASK_VIEW ORDER BY 生成时间 DESC");
}
//获取查询语句对应的数据表DataTable
var dataViews = dtView.Rows;
TaskView.Clear();
//遍历表中每行数据并初始化值
foreach (DataRow data in dataViews)
{
TaskView taskView = new TaskView();
taskView.JobId = data["环穿编号"].ToString();
taskView.TaskId = data["任务号"].ToString();
//taskView.PalletId = data["PalletId"].ToString();
taskView.SourceLocation = data["源站点"].ToString();
taskView.TargetLocation = data["目标站点"].ToString();
taskView.TaskType = data["任务类型"].ToString();
taskView.TaskState = data["任务状态"].ToString();
taskView.ScheduleState = data["调度状态"].ToString();
taskView.CreateTime = Convert.ToDateTime(data["生成时间"]);
taskView.ScheduleTime = Convert.ToDateTime(data["调度时间"]);
taskView.ReportState = data["取货状态"].ToString();
TaskView.Add(taskView);
}
}
/// <summary>
/// 查询任务
/// </summary>
[RelayCommand]
public void Query()
{
//关键词不为空且列名不为空
if (!string.IsNullOrEmpty(Keywords) && !string.IsNullOrEmpty(ColumnName))
{
using var context = new AppDbContext();
var tasks = context.Set<TaskView>()
.FromSqlInterpolated($"SELECT * FROM TASK_VIEW WHERE {col[ColumnName]} LIKE %{Keywords}% ORDER BY 生成时间 DESC")
.ToList();
TaskView.Clear();
//遍历表中每行数据并初始化值
foreach (TaskView task in tasks)
{
TaskView.Add(task);
}
}
else
{
LoadTaskGrid();
}
b = false;
}
/// <summary>
/// 重置筛选项
/// </summary>
[RelayCommand]
void Clear()
{
Keywords = string.Empty;
ColumnName = string.Empty;
LoadTaskGrid();
b = true;
}
#region 添加新任务相关
// 下拉框获取值属性 (源/目标排、列、层)
/// <summary>
/// 点击新建任务按钮命令
/// </summary>
[RelayCommand]
public void AddTask()
{
InputCheck();
//MessageBox.Show(SelectedTaskType);
//获取任务参数值
TaskRT taskRT = new TaskRT
{
TaskId = SqlHelper.GetTaskIdByManualGeneration().ToString(),//使用int类型初始值不是空 指定9起始的任务号为人工操作标识
SourceLocation = SelectedSourceLocation.ToString(),
TargetLocation = SelectedTargetLocation.ToString(),
ScheduleState = ScheduleStateCode.Trans_CircleRGV_Ready,
TaskState = TaskStateCode.Task_Running,
CreateTime = DateTime.Now,
//ReportState = 0
};
//任务校验和添加新任务(区分任务类型)
if (SelectedTaskTypeIndex == 0)
{
taskRT.TaskType = 10;
}
else if (SelectedTaskTypeIndex == 1)
{
taskRT.TaskType = 11;
}
else if (SelectedTaskTypeIndex == 2 || SelectedTaskTypeIndex == 3)
{
taskRT.TaskType = SelectedTaskTypeIndex;
}
else
{
MessageBox.Show("任务类型错误!");
return;
}
Insert(taskRT, taskRT.TaskType);
SqlHelper.NewEventLog($"手动下发调度任务:任务号:{taskRT.TaskId}", "USER");
//重载任务表
LoadTaskGrid();
}
#endregion
/// <summary>
/// 加载下拉框内容
/// </summary>
public void LoadColumns()
{
ColumnList.Clear();
//ColumnList.Add("作业号");
ColumnList.Add("任务号");
//ColumnList.Add("托盘号");
ColumnList.Add("任务类型");
ColumnList.Add("源站点");
ColumnList.Add("目标站点");
ColumnList.Add("任务状态");
//ColumnList.Add("生成时间");
col.Clear();
//col.Add("作业号", "JobId");
col.Add("任务号", "任务号");
//col.Add("托盘号", "PalletId");
col.Add("任务类型", "任务类型");
col.Add("源站点", "源站点");
col.Add("目标站点", "目标站点");
col.Add("任务状态", "任务状态");
//col.Add("生成时间", "CreateTime");
RGVNumbers.Clear();
for (int i = 0; i < RGVStation.RGVCount; i++)
{
RGVNumbers.Add(i);
}
}
/// <summary>
/// 加载表格内容
/// </summary>
public void LoadTaskGrid()
{
//-------------------------------------------------------------------------视图----------------------------------------------------------------------
//-------------------------------------------------------------------------视图----------------------------------------------------------------------
//-------------------------------------------------------------------------视图----------------------------------------------------------------------
using var context = new AppDbContext();
var tasks = context.Set<TaskView>()
.OrderByDescending(t => t.CreateTime)
.ToList();
TaskView.Clear();
//遍历表中每行数据并初始化值
foreach (TaskView task in tasks)
{
TaskView.Add(task);
}
}
/// <summary>
/// 向调度表中插入任务
/// </summary>
/// <param name="TaskRT">TaskRT类的实例化对象</param>
/// <param name="taskType">任务类型</param>
/// <returns></returns>
public void Insert(TaskRT taskRT, int taskType)
{
try
{
using var context = new AppDbContext();
context.Set<TaskRT>()
.Add(taskRT);
int result = context.SaveChanges();
if (result == 1) Log.Warning($"【手动添加调度任务】任务号:{taskRT.TaskId},{JsonConvert.SerializeObject(taskRT)}");
}
catch (DbUpdateException e)
{
MessageBox.Show($"发生了预期之外的错误:{e.Message}(错误代码:TVM000002)");
}
LoadTaskGrid();
}
/// <summary>
/// 站点信息初始化
/// </summary>
void LocationInitialize()
{
//Rows = new List<int>();
//Columns = new List<int>();
//Floors = new List<int>();
//RowCount = int.Parse(ConfigurationManager.AppSettings["Row"]);
//for (int i = 1; i <= RowCount; i++)
//{
// Rows.Add(i);
//}
//ColumnCount = int.Parse(ConfigurationManager.AppSettings["Column"]);
//for (int i = 1; i <= ColumnCount; i++)
//{
// Columns.Add(i);
//}
//FloorCount = int.Parse(ConfigurationManager.AppSettings["Floor"]);
//for (int i = 1; i <= FloorCount; i++)
//{
// Floors.Add(i);
//}
SourceLocations.Clear();
foreach (var item in CircleRGVsViewModel.route)
{
SourceLocations.Add(item.Key);
}
}
/// <summary>
/// 取货站点对应放货站点
/// </summary>
[RelayCommand]
void SourceToTarget()
{
try
{
SelectedTargetLocation = CircleRGVsViewModel.route[SelectedSourceLocation];
}
catch (Exception)
{
}
}
/// <summary>
/// 下发测试任务
/// </summary>
[RelayCommand]
void SendRGVTest()
{
if (MessageBox.Show("此操作会向环穿地面站PLC直接写入命令!是否继续?", "", MessageBoxButton.YesNo) != MessageBoxResult.Yes)
{
return;
}
CircleRGVStationCommand circleRGVStationCommand = new CircleRGVStationCommand()
{
Write_DeviceNumber = SelectedRGVNumber,
Write_TaskNumber = SqlHelper.GetTaskIdByManualGeneration(),
Write_TaskType = TestingTaskTypeIndex + 1,
Write_SourceLocation = SelectedSourceLocation,
Write_TargetLocation = SelectedTargetLocation,
};
CircleRGVsViewModel.SendRGVStationCommand(circleRGVStationCommand);
Log.Information($"【环穿下发任务测试】直接向地面站下发任务:{JsonConvert.SerializeObject(circleRGVStationCommand)}");
SqlHelper.NewEventLog($"向地面站PLC直接写入测试任务:任务号:{circleRGVStationCommand.Write_TaskNumber}", "USER");
IsTopDrawerOpen = false;
}
/// <summary>
/// 清空选择项
/// </summary>
[RelayCommand]
void TestClear()
{
SelectedRGVNumber = 0;
SelectedSourceLocation = 0;
SelectedTargetLocation = 0;
}
/// <summary>
/// 新任务输入校验
/// </summary>
public void InputCheck()
{
//跨巷道使用
if (string.IsNullOrEmpty(SelectedSourceLocation.ToString().Trim()))
{
MessageBox.Show("请选择取货站点!");
return;
}
if (string.IsNullOrEmpty(SelectedTargetLocation.ToString().Trim()))
{
MessageBox.Show("请选择目标站点!");
return;
}
}
Action<string> action;
//[RelayCommand]
void TaskFinishHandler()
{
InputDialog inputDialog = new InputDialog();
inputDialog.ShowDialog();
action = TaskFinish;
}
void TaskCancelHandler()
{
InputDialog inputDialog = new InputDialog();
inputDialog.ShowDialog();
action = TaskDelete;
}
void UpdateTaskStateToReadyHandler()
{
InputDialog inputDialog = new InputDialog();
inputDialog.ShowDialog();
action = UpdateTaskStateToReady;
}
/// <summary>
/// 手动完成任务
/// </summary>
[RelayCommand]
void TaskFinish(string taskId)
{
using var context = new AppDbContext();
var task = context.Set<TaskRT>()
.Where(t => t.TaskId == taskId)
.FirstOrDefault();
if (task == null)
{
MessageBox.Show("获取任务号错误!自动移除该任务");
context.Database
.ExecuteSqlInterpolated($"DELETE FROM TASK WHERE TASKID={taskId}");
context.SaveChanges();
return;
}
string taskType = "";
switch (task.TaskType)
{
case 10:
taskType = "实垛";
break;
case 11:
taskType = "空托";
break;
default:
break;
}
if (MessageBox.Show($"确认人工完成任务号:{taskId}的任务?\r\n(错误的操作时机可能会导致生成空任务)", "警告", MessageBoxButton.OKCancel) == MessageBoxResult.OK)
{
task.TaskState = TaskStateCode.Task_Finish_Manual;
if (context.SaveChanges() == 1)
{
Log.Information($"【人工操作】手动完成任务,任务号:{taskId}");
SqlHelper.NewEventLog($"人工完成{taskType}任务:{taskId}", "USER");
}
}
LoadTaskGrid();
}
/// <summary>
/// 手动删除(取消)任务
/// </summary>
[RelayCommand]
void TaskDelete(string taskId)
{
using var context = new AppDbContext();
var task = context.Set<TaskRT>()
.Where(t => t.TaskId == taskId)
.FirstOrDefault();
if (task == null)
{
MessageBox.Show("获取任务号错误!自动移除该任务");
context.Database
.ExecuteSqlInterpolated($"DELETE FROM TASK WHERE TASKID={taskId}");
context.SaveChanges();
return;
}
string taskType = "";
switch (task.TaskType)
{
case 10:
taskType = "实垛";
break;
case 11:
taskType = "空托";
break;
default:
break;
}
if (MessageBox.Show($"确认人工取消任务号:{taskId}的任务?\r\n(错误的操作时机可能会导致生成空任务)", "警告", MessageBoxButton.OKCancel) == MessageBoxResult.OK)
{
task.TaskState = TaskStateCode.Task_Finish_Cancel;
if (context.SaveChanges() == 1)
{
Log.Information($"【人工操作】手动取消任务,任务号:{taskId}");
SqlHelper.NewEventLog($"人工取消{taskType}任务:{taskId}", "USER");
}
}
LoadTaskGrid();
}
/// <summary>
/// 当向环穿下发任务失败时,可以选择重新下发
/// 只能在调度状态为【环穿-待执行】时可用
/// </summary>
/// <param name="taskId"></param>
[RelayCommand]
void UpdateTaskStateToReady(string taskId)
{
using var context = new AppDbContext();
var task = context.Set<TaskRT>()
.Where(t => t.TaskId == taskId && t.ScheduleState == ScheduleStateCode.Trans_CircleRGV_Ready)
.FirstOrDefault();
if (task == null)
{
MessageBox.Show("设备运行时的任务无法重下!");
return;
}
if (MessageBox.Show($"确认将任务:{taskId}的任务状态更改为【待执行】?\r\n此操作会重新下发当前任务(仅在环穿调度状态为【环穿-待执行】时生效)", "警告", MessageBoxButton.OKCancel) == MessageBoxResult.OK)
{
task.TaskState = TaskStateCode.Task_Ready;
if (context.SaveChanges() == 1)
{
Log.Information($"【人工操作】重新下发任务,任务号:{taskId}");
SqlHelper.NewEventLog($"人工重下任务:{taskId}", "USER");
}
}
LoadTaskGrid();
}
}
}

View File

@@ -0,0 +1,641 @@
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<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();
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);
}
/// <summary>
/// 加载/重载表数据---指定数据集
/// </summary>
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);
}
}
/// <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_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)
{
}
}
/// <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 = 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));
}
//********************************************跳转页码时查询要附加顶部查询条件获取共同查询结果显示*******************************************
//********************************************跳转页码时查询要附加顶部查询条件获取共同查询结果显示*******************************************
//********************************************跳转页码时查询要附加顶部查询条件获取共同查询结果显示*******************************************
/// <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} 页";
}
}
}
}