添加项目文件。
This commit is contained in:
694
WPFWCSDemo/ViewModels/AlarmHistoryViewModel.cs
Normal file
694
WPFWCSDemo/ViewModels/AlarmHistoryViewModel.cs
Normal file
@@ -0,0 +1,694 @@
|
||||
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} 页";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
455
WPFWCSDemo/ViewModels/AlarmViewModel.cs
Normal file
455
WPFWCSDemo/ViewModels/AlarmViewModel.cs
Normal file
@@ -0,0 +1,455 @@
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
using CommunityToolkit.Mvvm.Input;
|
||||
using Serilog;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Data;
|
||||
using System.Data.SqlClient;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Threading;
|
||||
using WPFWCSDemo.Common;
|
||||
using WPFWCSDemo.Data;
|
||||
using WPFWCSDemo.Models.Tables;
|
||||
using WPFWCSDemo.StateCode;
|
||||
using WPFWCSDemo.Utilities;
|
||||
using WPFWCSDemo.Utilities.Table;
|
||||
|
||||
namespace WPFWCSDemo.ViewModels
|
||||
{
|
||||
public partial class AlarmViewModel : ObservableObject
|
||||
{
|
||||
/// <summary>
|
||||
/// 用于报警的定时器
|
||||
/// </summary>
|
||||
private DispatcherTimer dispatcherTimer;
|
||||
|
||||
/// <summary>
|
||||
/// 查询操作停止刷新页面标志 true-查询操作后停止刷新 false-正常定时刷新
|
||||
/// </summary>
|
||||
bool b;
|
||||
|
||||
public AlarmViewModel()
|
||||
{
|
||||
Alarm = new ObservableCollection<Alarm>();
|
||||
|
||||
b = false;
|
||||
|
||||
//AlarmInitialize();
|
||||
|
||||
LoadAlarm();
|
||||
|
||||
//Task.Run(() => AlarmMonitorAsync());
|
||||
|
||||
// 设置定时器属性
|
||||
dispatcherTimer = new DispatcherTimer();
|
||||
dispatcherTimer.Interval = TimeSpan.FromSeconds(2); // 设置时间间隔1秒
|
||||
dispatcherTimer.Tick += AlarmDispatcherTimer_Tick; // 添加事件处理程序
|
||||
dispatcherTimer.Start(); // 启动计时器
|
||||
|
||||
}
|
||||
|
||||
|
||||
static Dictionary<string, Alarm> alarms = new Dictionary<string, Alarm>();
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 实时表数据
|
||||
/// </summary>
|
||||
[ObservableProperty]
|
||||
ObservableCollection<Alarm> _alarm;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 报警级别选中项
|
||||
/// </summary>
|
||||
[ObservableProperty]
|
||||
int _alarmLevelSelectedIndex;
|
||||
/// <summary>
|
||||
/// 报警级别选中项
|
||||
/// </summary>
|
||||
[ObservableProperty]
|
||||
int _alarmLevelSelectedItem;
|
||||
string alarmLevel;
|
||||
|
||||
/// <summary>
|
||||
/// 查询关键词
|
||||
/// </summary>
|
||||
[ObservableProperty]
|
||||
string _keywords;
|
||||
|
||||
|
||||
private void AlarmDispatcherTimer_Tick(object? sender, EventArgs e)
|
||||
{
|
||||
RealTimeAlarm();
|
||||
|
||||
if (!b)
|
||||
{
|
||||
LoadAlarm();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 加载表数据
|
||||
/// </summary>
|
||||
[RelayCommand]
|
||||
void LoadAlarm()
|
||||
{
|
||||
using var context = new AppDbContext();
|
||||
|
||||
var alarms = context.Set<Alarm>()
|
||||
.OrderBy(t => t.Gen_Time)
|
||||
.ToList();
|
||||
|
||||
Alarm.Clear();
|
||||
|
||||
if (alarms is null || alarms.Count == 0) return;
|
||||
|
||||
foreach (var alarm in alarms)
|
||||
{
|
||||
Alarm.Add(alarm);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 切换优先级筛选报警
|
||||
/// </summary>
|
||||
[RelayCommand]
|
||||
void AlarmLevelSelectItemChanged()
|
||||
{
|
||||
Alarm.Clear();
|
||||
|
||||
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 FROM ALARM WHERE PRIORITY=@Priority",
|
||||
new SqlParameter("@Priority", alarmLevel));
|
||||
}
|
||||
else
|
||||
{
|
||||
dt = SqlHelper.ExecuteTable(
|
||||
"SELECT POINT_ID,DESCRIPTION,PRIORITY,DEVICE_ID,GEN_TIME FROM ALARM WHERE PRIORITY=@Priority AND DESCRIPTION LIKE @Keywords",
|
||||
new SqlParameter("@Priority", alarmLevel),
|
||||
new SqlParameter("@Keywords", $"%{Keywords}%"));//此处代表如果未填写关键词则忽略该条件
|
||||
}
|
||||
|
||||
var datas = dt.Rows;
|
||||
|
||||
|
||||
//遍历表中每行数据并初始化值
|
||||
foreach (DataRow data in datas)
|
||||
{
|
||||
Alarm a = new Alarm();
|
||||
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"]);
|
||||
|
||||
Alarm.Add(a);
|
||||
}
|
||||
|
||||
LoadAlarm();
|
||||
|
||||
b = true;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 查询
|
||||
/// </summary>
|
||||
[RelayCommand]
|
||||
void Query()
|
||||
{
|
||||
Alarm.Clear();
|
||||
|
||||
DataTable? dt;
|
||||
|
||||
|
||||
if (!string.IsNullOrEmpty(Keywords))
|
||||
{
|
||||
dt = SqlHelper.ExecuteTable(
|
||||
$"SELECT * FROM ALARM WHERE DESCRIPTION like @Keywords ORDER BY Gen_Time DESC",
|
||||
new SqlParameter("@Keywords", $"%{Keywords}%"));
|
||||
}
|
||||
else
|
||||
{
|
||||
dt = SqlHelper.ExecuteTable("SELECT * FROM ALARM");
|
||||
}
|
||||
|
||||
|
||||
var datas = dt.Rows;
|
||||
|
||||
foreach (DataRow data in datas)
|
||||
{
|
||||
Alarm a = new Alarm();
|
||||
a.Point_Id = data["Point_Id"].ToString();
|
||||
a.Description = data["Description"].ToString();
|
||||
a.Priority = data["Priority"].ToString();
|
||||
a.Device_Id = data["Device_Id"].ToString();
|
||||
try
|
||||
{
|
||||
a.Gen_Time = Convert.ToDateTime(data["Gen_Time"]);
|
||||
}
|
||||
catch
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
Alarm.Add(a);
|
||||
}
|
||||
|
||||
b = true;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 重置选择
|
||||
/// </summary>
|
||||
[RelayCommand]
|
||||
void Clear()
|
||||
{
|
||||
|
||||
Keywords = string.Empty;
|
||||
|
||||
Alarm.Clear();
|
||||
LoadAlarm();
|
||||
|
||||
b = false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 触发报警-显示在报警表中
|
||||
/// </summary>
|
||||
public static void RealTimeAlarm()
|
||||
{
|
||||
AlarmTrigger("DB622.0.2", false);
|
||||
AlarmTrigger("DB622.8.1", false);
|
||||
AlarmTrigger("DB622.10.1", false);
|
||||
AlarmTrigger("DB622.2.2", false);
|
||||
AlarmTrigger("DB622.2.3", false);
|
||||
AlarmTrigger("DB622.6.1", false);
|
||||
AlarmTrigger("DB622.0.1", false);
|
||||
AlarmTrigger("DB622.2.1", false);
|
||||
|
||||
for (int i = 1; i <= RGVStation.RGVCount; i++)
|
||||
{
|
||||
AlarmTrigger($"DB" + (300 + i) + ".24.0", true);
|
||||
AlarmTrigger($"DB" + (300 + i) + ".24.1", true);
|
||||
AlarmTrigger($"DB" + (300 + i) + ".24.2", true);
|
||||
AlarmTrigger($"DB" + (300 + i) + ".24.3", true);
|
||||
AlarmTrigger($"DB" + (300 + i) + ".24.4", true);
|
||||
AlarmTrigger($"DB" + (300 + i) + ".24.5", true);
|
||||
AlarmTrigger($"DB" + (300 + i) + ".24.6", true);
|
||||
|
||||
AlarmTrigger($"DB" + (300 + i) + ".25.0", true);
|
||||
AlarmTrigger($"DB" + (300 + i) + ".25.1", true);
|
||||
AlarmTrigger($"DB" + (300 + i) + ".25.2", true);
|
||||
AlarmTrigger($"DB" + (300 + i) + ".25.3", true);
|
||||
AlarmTrigger($"DB" + (300 + i) + ".25.4", true);
|
||||
AlarmTrigger($"DB" + (300 + i) + ".25.5", true);
|
||||
AlarmTrigger($"DB" + (300 + i) + ".25.6", true);
|
||||
AlarmTrigger($"DB" + (300 + i) + ".25.7", true);
|
||||
}
|
||||
|
||||
AlarmTrigger($"DB500.1.0", true);
|
||||
AlarmTrigger($"DB500.1.1", true);
|
||||
AlarmTrigger($"DB500.1.2", true);
|
||||
AlarmTrigger($"DB500.1.3", true);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 实时报警触发(读PLC地址)
|
||||
/// </summary>
|
||||
/// <param name="address">报警地址</param>
|
||||
/// <param name="b">报警触发值:true-正常触发(0-正常 1-报警) false-取反触发(0-报警 1-正常)</param>
|
||||
public static void AlarmTrigger(string address, bool b)
|
||||
{
|
||||
try
|
||||
{
|
||||
//正常触发 即true-报警 false-正常
|
||||
if (b)
|
||||
{
|
||||
if (CircleRGVsViewModel.Instance.GetStationConnection().ReadBool(address).Content)
|
||||
{
|
||||
int result = AlarmManager.Insert(alarms[address]);
|
||||
|
||||
if (result == 1 && alarms[address].Priority=="HIGH")
|
||||
{
|
||||
Log.Warning($"【报警信息】触发{alarms[address].Description}");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
int result = AlarmManager.Delete(alarms[address]);
|
||||
|
||||
if (result == 1 && alarms[address].Priority == "HIGH")
|
||||
{
|
||||
Log.Warning($"【报警信息】{alarms[address].Description}已复位");
|
||||
}
|
||||
}
|
||||
}
|
||||
//取反触发 即true-正常 false-触发
|
||||
else
|
||||
{
|
||||
if (!CircleRGVsViewModel.Instance.GetStationConnection().ReadBool(address).Content)
|
||||
{
|
||||
int result = AlarmManager.Insert(alarms[address]);
|
||||
|
||||
if (result == 1 && alarms[address].Priority == "HIGH")
|
||||
{
|
||||
Log.Warning($"【报警信息】触发{alarms[address].Description}");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
int result = AlarmManager.Delete(alarms[address]);
|
||||
|
||||
if (result == 1 && alarms[address].Priority == "HIGH")
|
||||
{
|
||||
Log.Warning($"【报警信息】{alarms[address].Description}已复位");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 实时报警触发(自定义报警)
|
||||
/// </summary>
|
||||
/// <param name="address"></param>
|
||||
/// <param name="b">报警触发值:true-正常触发(0-正常 1-报警) false-取反触发(0-报警 1-正常)</param>
|
||||
public void AlarmTrigger(bool b)
|
||||
{
|
||||
try
|
||||
{
|
||||
//正常触发 即true-报警 false-正常
|
||||
//if (b)
|
||||
//{
|
||||
// if (CircleRGVsViewModel.stationConnection.ReadBool(address).Content)
|
||||
// {
|
||||
// int result = AlarmManager.Insert(alarms[address]);
|
||||
|
||||
// if (result == 1 && alarms[address].Priority == "HIGH")
|
||||
// {
|
||||
// Log.Warning($"【报警信息】触发{alarms[address].Description}");
|
||||
// }
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// int result = AlarmManager.Delete(alarms[address]);
|
||||
|
||||
// if (result == 1 && alarms[address].Priority == "HIGH")
|
||||
// {
|
||||
// Log.Warning($"【报警信息】{alarms[address].Description}已复位");
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
////取反触发 即true-正常 false-触发
|
||||
//else
|
||||
//{
|
||||
// if (!CircleRGVsViewModel.stationConnection.ReadBool(address).Content)
|
||||
// {
|
||||
// int result = AlarmManager.Insert(alarms[address]);
|
||||
|
||||
// if (result == 1 && alarms[address].Priority == "HIGH")
|
||||
// {
|
||||
// Log.Warning($"【报警信息】触发{alarms[address].Description}");
|
||||
// }
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// int result = AlarmManager.Delete(alarms[address]);
|
||||
|
||||
// if (result == 1 && alarms[address].Priority == "HIGH")
|
||||
// {
|
||||
// Log.Warning($"【报警信息】{alarms[address].Description}已复位");
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 将某条报警添加到集合中在表中显示,若该集合中已存在当前报警,则不执行
|
||||
/// </summary>
|
||||
/// <param name="alarm">报警对象</param>
|
||||
public static void AlarmInitialize()
|
||||
{
|
||||
alarms.Clear();
|
||||
|
||||
//alarms.Add("DB610.64.0", new Alarm() { Point_Id = "AlarmTest", Description = "报警功能测试", Device_Id = "环穿", Priority = "HIGH" });
|
||||
|
||||
alarms.Add("DB622.0.2", new Alarm() { Point_Id = "Conv_Alarm1", Description = "无法下发任务-1001供实垛输送机系统异常", Device_Id = "输送线", Priority = "MEDIUM" });
|
||||
alarms.Add("DB622.8.1", new Alarm() { Point_Id = "Conv_Alarm2", Description = "无法下发任务-1003供实垛/1004放空托输送机系统异常", Device_Id = "输送线", Priority = "MEDIUM" });
|
||||
alarms.Add("DB622.10.1", new Alarm() { Point_Id = "Conv_Alarm3", Description = "无法下发任务-1005供实垛输送机系统异常", Device_Id = "输送线", Priority = "MEDIUM" });
|
||||
alarms.Add("DB622.2.2", new Alarm() { Point_Id = "Conv_Alarm4", Description = "无法下发任务-1007放实垛输送机系统异常", Device_Id = "输送线", Priority = "MEDIUM" });
|
||||
alarms.Add("DB622.2.3", new Alarm() { Point_Id = "Conv_Alarm5", Description = "无法下发任务-1008放实垛输送机系统异常", Device_Id = "输送线", Priority = "MEDIUM" });
|
||||
alarms.Add("DB622.6.1", new Alarm() { Point_Id = "Conv_Alarm6", Description = "无法下发任务-1013供空托输送机系统异常", Device_Id = "输送线", Priority = "MEDIUM" });
|
||||
alarms.Add("DB622.0.1", new Alarm() { Point_Id = "Conv_Alarm7", Description = "无法下发任务-1002放空托输送机系统异常", Device_Id = "输送线", Priority = "MEDIUM" });
|
||||
//alarms.Add("DB622.8.1", new Alarm() { Point_Id = "Conv_Alarm6", Description = "无法下发任务-1004供空托输送机系统异常", Device_Id = "输送线", Priority = "MEDIUM" });
|
||||
alarms.Add("DB622.2.1", new Alarm() { Point_Id = "Conv_Alarm8", Description = "无法下发任务-1006放空托输送机系统异常", Device_Id = "输送线", Priority = "MEDIUM" });
|
||||
|
||||
for (int i = 1; i <= RGVStation.RGVCount; i++)
|
||||
{
|
||||
alarms.Add($"DB" + (300 + i) + ".25.0", new Alarm() { Point_Id = $"RGV{i}_Alarm1", Description = $"{i}#环穿 急停触发", Device_Id = "环穿", Priority = "HIGH" });
|
||||
alarms.Add($"DB" + (300 + i) + ".25.1", new Alarm() { Point_Id = $"RGV{i}_Alarm2", Description = $"{i}#环穿 运行变频报警", Device_Id = "环穿", Priority = "HIGH" });
|
||||
alarms.Add($"DB" + (300 + i) + ".25.2", new Alarm() { Point_Id = $"RGV{i}_Alarm3", Description = $"{i}#环穿 输送变频报警", Device_Id = "环穿", Priority = "HIGH" });
|
||||
alarms.Add($"DB" + (300 + i) + ".25.3", new Alarm() { Point_Id = $"RGV{i}_Alarm4", Description = $"{i}#环穿 取货超时", Device_Id = "环穿", Priority = "HIGH" });
|
||||
alarms.Add($"DB" + (300 + i) + ".25.4", new Alarm() { Point_Id = $"RGV{i}_Alarm5", Description = $"{i}#环穿 放货超时", Device_Id = "环穿", Priority = "HIGH" });
|
||||
alarms.Add($"DB" + (300 + i) + ".25.5", new Alarm() { Point_Id = $"RGV{i}_Alarm6", Description = $"{i}#环穿 BPS出错", Device_Id = "环穿", Priority = "HIGH" });
|
||||
alarms.Add($"DB" + (300 + i) + ".25.6", new Alarm() { Point_Id = $"RGV{i}_Alarm7", Description = $"{i}#环穿 输送超时", Device_Id = "环穿", Priority = "HIGH" });
|
||||
alarms.Add($"DB" + (300 + i) + ".25.7", new Alarm() { Point_Id = $"RGV{i}_Alarm8", Description = $"{i}#环穿 安全门打开", Device_Id = "环穿", Priority = "HIGH" });
|
||||
alarms.Add($"DB" + (300 + i) + ".24.0", new Alarm() { Point_Id = $"RGV{i}_Alarm9", Description = $"{i}#环穿 输送机超界", Device_Id = "环穿", Priority = "HIGH" });
|
||||
alarms.Add($"DB" + (300 + i) + ".24.1", new Alarm() { Point_Id = $"RGV{i}_Alarm10", Description = $"{i}#环穿 货物探测状态异常", Device_Id = "环穿", Priority = "HIGH" });
|
||||
alarms.Add($"DB" + (300 + i) + ".24.2", new Alarm() { Point_Id = $"RGV{i}_Alarm11", Description = $"{i}#环穿 防撞触发", Device_Id = "环穿", Priority = "HIGH" });
|
||||
alarms.Add($"DB" + (300 + i) + ".24.3", new Alarm() { Point_Id = $"RGV{i}_Alarm12", Description = $"{i}#环穿 触边保护", Device_Id = "环穿", Priority = "HIGH" });
|
||||
alarms.Add($"DB" + (300 + i) + ".24.4", new Alarm() { Point_Id = $"RGV{i}_Alarm13", Description = $"{i}#环穿 倾斜检测触发", Device_Id = "环穿", Priority = "HIGH" });
|
||||
alarms.Add($"DB" + (300 + i) + ".24.5", new Alarm() { Point_Id = $"RGV{i}_Alarm14", Description = $"{i}#环穿 维修小车移位", Device_Id = "环穿", Priority = "HIGH" });
|
||||
alarms.Add($"DB" + (300 + i) + ".24.6", new Alarm() { Point_Id = $"RGV{i}_Alarm15", Description = $"{i}#环穿 卡阻标志", Device_Id = "环穿", Priority = "HIGH" });
|
||||
alarms.Add($"DB" + (300 + i) + ".24.7", new Alarm() { Point_Id = $"RGV{i}_Alarm16", Description = $"{i}#环穿 安全光栅触发", Device_Id = "环穿", Priority = "HIGH" });
|
||||
}
|
||||
|
||||
//alarms.Add($"DB500.1.0", new Alarm() { Point_Id = $"Conv_A_Alarm1", Description = $"实垛A线 下发任务超时", Device_Id = "系统", Priority = "HIGH" });
|
||||
//alarms.Add($"DB500.1.1", new Alarm() { Point_Id = $"Conv_B_Alarm1", Description = $"实垛B线 下发任务超时", Device_Id = "系统", Priority = "HIGH" });
|
||||
//alarms.Add($"DB500.1.2", new Alarm() { Point_Id = $"Conv_C_Alarm1", Description = $"实垛C线 下发任务超时", Device_Id = "系统", Priority = "HIGH" });
|
||||
//alarms.Add($"DB500.1.3", new Alarm() { Point_Id = $"Conv_D_Alarm1", Description = $"实垛D线 下发任务超时", Device_Id = "系统", Priority = "HIGH" });
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
1115
WPFWCSDemo/ViewModels/CircleRGVsViewModel.cs
Normal file
1115
WPFWCSDemo/ViewModels/CircleRGVsViewModel.cs
Normal file
File diff suppressed because it is too large
Load Diff
16
WPFWCSDemo/ViewModels/ControllerViewModel.cs
Normal file
16
WPFWCSDemo/ViewModels/ControllerViewModel.cs
Normal file
@@ -0,0 +1,16 @@
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
using CommunityToolkit.Mvvm.Input;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows;
|
||||
|
||||
namespace WPFWCSDemo.ViewModels
|
||||
{
|
||||
public partial class ControllerViewModel:ObservableObject
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
75
WPFWCSDemo/ViewModels/ConvsViewModel.cs
Normal file
75
WPFWCSDemo/ViewModels/ConvsViewModel.cs
Normal file
@@ -0,0 +1,75 @@
|
||||
using HslCommunication;
|
||||
using HslCommunication.Profinet.Siemens;
|
||||
using Serilog;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Net.NetworkInformation;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using WPFWCSDemo.Models.Devices.CircleRGV;
|
||||
using WPFWCSDemo.Models.Devices.Conv;
|
||||
using WPFWCSDemo.Models.Devices.Conv.ConvGet;
|
||||
using WPFWCSDemo.Models.Devices.Conv.ConvPut;
|
||||
|
||||
namespace WPFWCSDemo.ViewModels
|
||||
{
|
||||
public class ConvsViewModel
|
||||
{
|
||||
public static SiemensS7Net? convConnection;
|
||||
|
||||
public static string ip;
|
||||
|
||||
public static void InitializeConv()
|
||||
{
|
||||
ip = "192.168.10.5";
|
||||
|
||||
convConnection = new SiemensS7Net(SiemensPLCS.S1500, ip);
|
||||
|
||||
//设置连接超时时间
|
||||
convConnection.ConnectTimeOut = 2000;
|
||||
|
||||
OperateResult result = convConnection.ConnectServer();
|
||||
|
||||
if (result.IsSuccess)
|
||||
{
|
||||
Log.Warning($"输送机初始化连接成功!");
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
Log.Warning($"输送机初始化连接失败,{result.Message},错误代码:ConvData0001");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 输送机plc连接
|
||||
/// </summary>
|
||||
/// <returns>1--正常 -1--失败 0-未知异常</returns>
|
||||
public static int PlcConnect()
|
||||
{
|
||||
if (convConnection is null)
|
||||
{
|
||||
convConnection = new SiemensS7Net(SiemensPLCS.S1500, ip);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
convConnection.ConnectServer();
|
||||
//Log.Warning($"输送机连接成功");
|
||||
return 1;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Log.Warning($"输送机连接失败,{e.Message},错误代码:ConvData0002");
|
||||
return -1;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,72 @@
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
using CommunityToolkit.Mvvm.Input;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Reflection.Metadata;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows;
|
||||
|
||||
namespace WPFWCSDemo.ViewModels.CustomComponent
|
||||
{
|
||||
public partial class InputDialogViewModel : ObservableObject
|
||||
{
|
||||
|
||||
public InputDialogViewModel(Window window,Action<string> action)
|
||||
{
|
||||
Caption = "验证";
|
||||
InputDialog = window;
|
||||
_task = action;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 标题
|
||||
/// </summary>
|
||||
[ObservableProperty]
|
||||
string _caption;
|
||||
/// <summary>
|
||||
/// 内容
|
||||
/// </summary>
|
||||
[ObservableProperty]
|
||||
string _content;
|
||||
/// <summary>
|
||||
/// 当前页面
|
||||
/// </summary>
|
||||
[ObservableProperty]
|
||||
Window _inputDialog;
|
||||
|
||||
[ObservableProperty]
|
||||
Action<string>? _task;
|
||||
|
||||
/// <summary>
|
||||
/// 关闭窗口
|
||||
/// </summary>
|
||||
/// <param name="window"></param>
|
||||
[RelayCommand]
|
||||
void Cancel(Window window)
|
||||
{
|
||||
window.Close();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 输入密码
|
||||
/// </summary>
|
||||
[RelayCommand]
|
||||
void Accept(string taskId)
|
||||
{
|
||||
if (Content == "472")
|
||||
{
|
||||
MessageBox.Show("密码正确");
|
||||
//Task.Invoke(taskId);
|
||||
}
|
||||
else
|
||||
{
|
||||
MessageBox.Show("密码错误");
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,71 @@
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
using CommunityToolkit.Mvvm.Input;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Reflection.Metadata;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows;
|
||||
using WPFWCSDemo.Views;
|
||||
|
||||
namespace WPFWCSDemo.ViewModels.CustomComponent
|
||||
{
|
||||
public partial class MessageDialogViewModel:ObservableObject
|
||||
{
|
||||
public MessageDialogViewModel(Window window)
|
||||
{
|
||||
Caption = "消息";
|
||||
Content = "关闭该系统可能导致执行中的任务中断,是否确认要退出程序?";
|
||||
MessageDialog = window;
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 标题
|
||||
/// </summary>
|
||||
[ObservableProperty]
|
||||
string _caption;
|
||||
/// <summary>
|
||||
/// 内容
|
||||
/// </summary>
|
||||
[ObservableProperty]
|
||||
string _content;
|
||||
/// <summary>
|
||||
/// 当前页面
|
||||
/// </summary>
|
||||
[ObservableProperty]
|
||||
Window _messageDialog;
|
||||
|
||||
/// <summary>
|
||||
/// 关闭窗口
|
||||
/// </summary>
|
||||
/// <param name="window"></param>
|
||||
[RelayCommand]
|
||||
void Cancel(Window window)
|
||||
{
|
||||
window.Close();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 终止程序
|
||||
/// </summary>
|
||||
[RelayCommand]
|
||||
void Accept()
|
||||
{
|
||||
Application.Current.Shutdown();
|
||||
}
|
||||
|
||||
|
||||
public void GetMessageInfo(string content)
|
||||
{
|
||||
Caption = "消息";
|
||||
Content = content;
|
||||
}
|
||||
public void GetMessageInfo(string caption,string content)
|
||||
{
|
||||
Caption = caption;
|
||||
Content = content;
|
||||
}
|
||||
}
|
||||
}
|
||||
566
WPFWCSDemo/ViewModels/DataInfoViewModel.cs
Normal file
566
WPFWCSDemo/ViewModels/DataInfoViewModel.cs
Normal file
@@ -0,0 +1,566 @@
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
using LiveCharts.Wpf;
|
||||
using LiveCharts;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using WPFWCSDemo.Models;
|
||||
using System.Threading;
|
||||
using WPFWCSDemo.Utilities.Table;
|
||||
using System.Data;
|
||||
using WPFWCSDemo.Utilities;
|
||||
using WPFWCSDemo.StateCode;
|
||||
using System.Windows;
|
||||
using System.ComponentModel;
|
||||
using System.Windows.Threading;
|
||||
using WPFWCSDemo.Models.Tables;
|
||||
using WPFWCSDemo.Models.Devices.CircleRGV;
|
||||
using System.Windows.Media;
|
||||
|
||||
|
||||
namespace WPFWCSDemo.ViewModels
|
||||
{
|
||||
public partial class DataInfoViewModel : ObservableObject
|
||||
{
|
||||
/// <summary>
|
||||
/// 用于监控环穿参数面板的定时器
|
||||
/// </summary>
|
||||
private DispatcherTimer dispatcherTimer;
|
||||
|
||||
|
||||
public DataInfoViewModel()
|
||||
{
|
||||
//传递frame控件用于顶部面板点击事件跳转
|
||||
//_navigationFrame = navigationFrame;
|
||||
|
||||
TaskBars = new ObservableCollection<DataInfoTaskbar>();
|
||||
|
||||
Tasks = new ObservableCollection<DataInfoTaskAsc>();
|
||||
|
||||
RowSeriesTitles = new string[13];
|
||||
|
||||
RowSeriesCollection = new SeriesCollection(new Series[13]);
|
||||
|
||||
RowValues = new ChartValues<double>(new double[13]);
|
||||
|
||||
PieSeriesCollection = new SeriesCollection();
|
||||
|
||||
PieValuesCount = new ChartValues<int>(new int[4]);
|
||||
|
||||
LineValuesCount = new ChartValues<int>(new int[4]);
|
||||
|
||||
LineValuesPallets = new ChartValues<int>(new int[7]);
|
||||
|
||||
LineValuesGoods = new ChartValues<int>(new int[7]);
|
||||
|
||||
CreateTaskBars();
|
||||
|
||||
TaskAscRecord();
|
||||
|
||||
Data_TaskBar();
|
||||
|
||||
Data_TaskRecord();
|
||||
|
||||
GetPie();
|
||||
|
||||
GetRowsInitialize();
|
||||
|
||||
GetLineCountOfWeek();
|
||||
|
||||
GetLineOfTaskCompare();
|
||||
|
||||
//Task.Run(() => DataMonitorAsync());
|
||||
|
||||
// 设置定时器属性
|
||||
dispatcherTimer = new DispatcherTimer();
|
||||
dispatcherTimer.Interval = TimeSpan.FromSeconds(2); // 设置时间间隔为1秒
|
||||
dispatcherTimer.Tick += DispatcherTimer_Tick; // 添加事件处理程序
|
||||
dispatcherTimer.Start(); // 启动计时器
|
||||
|
||||
|
||||
//MessageBox.Show(GetDate(0));
|
||||
}
|
||||
|
||||
|
||||
public async Task DataMonitorAsync()
|
||||
{
|
||||
while (true)
|
||||
{
|
||||
Application.Current.Dispatcher.Invoke(() =>
|
||||
{
|
||||
Data_TaskBar();
|
||||
|
||||
TaskAscRecord();
|
||||
|
||||
Data_TaskRecord();
|
||||
|
||||
GetLineCountOfWeek();
|
||||
|
||||
GetLineOfTaskCompare();
|
||||
});
|
||||
|
||||
await Task.Delay(1000);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
private void DispatcherTimer_Tick(object? sender, EventArgs e)
|
||||
{
|
||||
Data_TaskBar();
|
||||
|
||||
TaskAscRecord();
|
||||
|
||||
Data_TaskRecord();
|
||||
|
||||
GetLineCountOfWeek();
|
||||
|
||||
GetLineOfTaskCompare();
|
||||
|
||||
GetRows();
|
||||
|
||||
//GetRowsInitialize();
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 执行中任务动态转圈元素显示
|
||||
/// </summary>
|
||||
[ObservableProperty]
|
||||
Visibility _taskExecutingProgressIsVisible;
|
||||
|
||||
/// <summary>
|
||||
/// 报警动态转圈元素显示
|
||||
/// </summary>
|
||||
[ObservableProperty]
|
||||
Visibility _alarmProgressIsVisible;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 上方任务面板对象
|
||||
/// </summary>
|
||||
[ObservableProperty]
|
||||
ObservableCollection<DataInfoTaskbar> _taskBars;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 顶部参数面板属性
|
||||
/// </summary>
|
||||
void CreateTaskBars()
|
||||
{
|
||||
TaskBars.Add(new DataInfoTaskbar() { Icon = "FormatListBulleted", Title = "待执行", Content = 0, Color = "#FF0CA0FF", Target = "Task" });
|
||||
TaskBars.Add(new DataInfoTaskbar() { Icon = "Reload", Title = "执行中", Content = 0, Color = "#FF1ECA3A", Target = "Task" });
|
||||
TaskBars.Add(new DataInfoTaskbar() { Icon = "ClockCheckOutLine", Title = "今日已完成", Content = 0, Color = "#FF02C6DC", Target = "TaskHistory" });
|
||||
TaskBars.Add(new DataInfoTaskbar() { Icon = "AlarmLightOutline", Title = "实时报警", Content = 0, Color = "Tomato", Target = "Alarm" });//"#FFFFA000"
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 数据展示1---顶部参数面板数据
|
||||
/// </summary>
|
||||
void Data_TaskBar()
|
||||
{
|
||||
using DataTable? dt = SqlHelper.ExecuteTable("SELECT COUNT(TASKID) FROM TASK WHERE TASKSTATE=@TaskState UNION ALL " +
|
||||
"SELECT COUNT(TASKID) FROM TASK WHERE TASKSTATE=@TaskState1 UNION ALL " +
|
||||
"SELECT COUNT(TASKID) FROM TASK_HISTORY WHERE (TASKSTATE=@TaskState2 OR TASKSTATE=@TaskState3 OR TASKSTATE=@TaskState4) AND FINISHTIME>=@FinishTime UNION ALL " +
|
||||
"SELECT COUNT(*) FROM ALARM",
|
||||
new System.Data.SqlClient.SqlParameter("@TaskState", TaskStateCode.Task_Ready),
|
||||
new System.Data.SqlClient.SqlParameter("@TaskState1", TaskStateCode.Task_Running),
|
||||
new System.Data.SqlClient.SqlParameter("@FinishTime", $"{DateTime.Now.Date}"),
|
||||
new System.Data.SqlClient.SqlParameter("@TaskState2", TaskStateCode.Task_Finish),
|
||||
new System.Data.SqlClient.SqlParameter("@TaskState3", TaskStateCode.Task_Finish_Manual),
|
||||
new System.Data.SqlClient.SqlParameter("@TaskState4", TaskStateCode.Task_Finish_Timeout)
|
||||
);
|
||||
if (dt == null) return;
|
||||
|
||||
TaskBars[0].Content = (int)dt.Rows[0][0];//待执行
|
||||
TaskBars[1].Content = (int)dt.Rows[1][0];//执行中
|
||||
TaskBars[2].Content = (int)dt.Rows[2][0];//当日已完成
|
||||
TaskBars[3].Content = (int)dt.Rows[3][0];//报警
|
||||
|
||||
//值为0---面板显示灰色,否则其他颜色
|
||||
TaskBars[0].Color = (int)dt.Rows[0][0] > 0 ? "Teal" : "DarkGray";
|
||||
TaskBars[1].Color = (int)dt.Rows[1][0] > 0 ? "#FF1ECA3A" : "DarkGray";
|
||||
TaskBars[2].Color = (int)dt.Rows[2][0] > 0 ? "#FF02C6DC" : "DarkGray";
|
||||
TaskBars[3].Color = (int)dt.Rows[3][0] > 0 ? "OrangeRed" : "DarkGray";
|
||||
|
||||
AlarmProgressIsVisible = (int)dt.Rows[3][0] > 0 ? Visibility.Visible : Visibility.Hidden;
|
||||
TaskExecutingProgressIsVisible = (int)dt.Rows[1][0] > 0 ? Visibility.Visible : Visibility.Hidden;
|
||||
|
||||
|
||||
}
|
||||
|
||||
[ObservableProperty]
|
||||
ObservableCollection<DataInfoTaskAsc> _tasks;
|
||||
|
||||
/// <summary>
|
||||
/// 部分执行中任务展示面板
|
||||
/// </summary>
|
||||
void TaskAscRecord()
|
||||
{
|
||||
Tasks.Clear();
|
||||
Tasks.Add(new DataInfoTaskAsc() { JobId = string.Empty, TaskId = string.Empty, TaskType = 0, ScheduleState = string.Empty, SourceLocation = string.Empty, TargetLocation = string.Empty });
|
||||
Tasks.Add(new DataInfoTaskAsc() { JobId = string.Empty, TaskId = string.Empty, TaskType = 0, ScheduleState = string.Empty, SourceLocation = string.Empty, TargetLocation = string.Empty });
|
||||
Tasks.Add(new DataInfoTaskAsc() { JobId = string.Empty, TaskId = string.Empty, TaskType = 0, ScheduleState = string.Empty, SourceLocation = string.Empty, TargetLocation = string.Empty });
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 数据展示2---获取日期最早的3条任务
|
||||
/// </summary>
|
||||
public void Data_TaskRecord()
|
||||
{
|
||||
using DataTable? dt = SqlHelper.ExecuteTable("SELECT TOP 3 * FROM TASK ORDER BY CREATETIME ASC");
|
||||
if (dt == null) return;
|
||||
|
||||
if (dt.Rows.Count == 0) return;
|
||||
|
||||
//任务1
|
||||
using TaskRT? taskRT = TaskManager.ToModels(dt.Rows[0]);
|
||||
Tasks[0].JobId = taskRT.JobId;
|
||||
Tasks[0].TaskId = taskRT.TaskId.ToString();
|
||||
Tasks[0].TaskType = taskRT.TaskType;
|
||||
Tasks[0].ScheduleState = taskRT.ScheduleState;
|
||||
Tasks[0].SourceLocation = taskRT.SourceLocation;
|
||||
Tasks[0].TargetLocation = taskRT.TargetLocation;
|
||||
|
||||
if (dt.Rows.Count == 1) return;
|
||||
//任务2
|
||||
using TaskRT? taskRT1 = TaskManager.ToModels(dt.Rows[1]);
|
||||
Tasks[1].JobId = taskRT1.JobId;
|
||||
Tasks[1].TaskId = taskRT1.TaskId.ToString();
|
||||
Tasks[1].TaskType = taskRT1.TaskType;
|
||||
Tasks[1].ScheduleState = taskRT1.ScheduleState;
|
||||
Tasks[1].SourceLocation = taskRT1.SourceLocation;
|
||||
Tasks[1].TargetLocation = taskRT1.TargetLocation;
|
||||
|
||||
if (dt.Rows.Count == 2) return;
|
||||
//任务3
|
||||
using TaskRT? taskRT2 = TaskManager.ToModels(dt.Rows[2]);
|
||||
Tasks[2].JobId = taskRT2.JobId;
|
||||
Tasks[2].TaskId = taskRT2.TaskId.ToString();
|
||||
Tasks[2].TaskType = taskRT2.TaskType;
|
||||
Tasks[2].ScheduleState = taskRT2.ScheduleState;
|
||||
Tasks[2].SourceLocation = taskRT2.SourceLocation;
|
||||
Tasks[2].TargetLocation = taskRT2.TargetLocation;
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 饼图数据集合
|
||||
/// </summary>
|
||||
[ObservableProperty]
|
||||
SeriesCollection _pieSeriesCollection;
|
||||
/// <summary>
|
||||
/// 数据集合值
|
||||
/// </summary>
|
||||
[ObservableProperty]
|
||||
double[] pieValues = new double[4];
|
||||
//设备使用次数
|
||||
[ObservableProperty]
|
||||
ChartValues<int> _pieValuesCount;
|
||||
|
||||
string[] s = new string[] { "1009线", "1010线", "1011线", "1012线" };
|
||||
|
||||
int[] dValuesPie = new int[4];
|
||||
/// <summary>
|
||||
/// 数据展示4---饼图面板
|
||||
/// </summary>
|
||||
private void GetPie()
|
||||
{
|
||||
using DataTable? dt = SqlHelper.ExecuteTable(
|
||||
"SELECT COUNT(SOURCELOCATION) FROM TASK_HISTORY WHERE (TASKSTATE=102 OR TASKSTATE=103 OR TASKSTATE=106) AND TARGETLOCATION='1009' AND FINISHTIME>=@FinishTime UNION ALL " +
|
||||
"SELECT COUNT(SOURCELOCATION) FROM TASK_HISTORY WHERE (TASKSTATE=102 OR TASKSTATE=103 OR TASKSTATE=106) AND TARGETLOCATION='1010' AND FINISHTIME>=@FinishTime UNION ALL " +
|
||||
"SELECT COUNT(SOURCELOCATION) FROM TASK_HISTORY WHERE (TASKSTATE=102 OR TASKSTATE=103 OR TASKSTATE=106) AND TARGETLOCATION='1011' AND FINISHTIME>=@FinishTime UNION ALL " +
|
||||
"SELECT COUNT(SOURCELOCATION) FROM TASK_HISTORY WHERE (TASKSTATE=102 OR TASKSTATE=103 OR TASKSTATE=106) AND TARGETLOCATION='1012' AND FINISHTIME>=@FinishTime ",
|
||||
new System.Data.SqlClient.SqlParameter("@FinishTime", DateTime.Now.AddDays(-7).ToString(TimeFormat.stringFormatDateOnly)));
|
||||
|
||||
//int[] dValues = new int[]
|
||||
//{
|
||||
// (int)dt.Rows[0][0],
|
||||
// (int)dt.Rows[1][0],
|
||||
// (int)dt.Rows[2][0],
|
||||
// (int)dt.Rows[3][0]
|
||||
//};
|
||||
|
||||
for (int i = 0; i < dValuesPie.Length; i++)
|
||||
{
|
||||
dValuesPie[i] = (int)dt.Rows[i][0];
|
||||
}
|
||||
|
||||
//前台数据赋值
|
||||
for (int i = 0; i < dValuesPie.Length; i++)
|
||||
{
|
||||
PieValuesCount[i] = dValuesPie[i];
|
||||
}
|
||||
|
||||
//PieSeriesCollection = new SeriesCollection();
|
||||
//int[] pieValues = new int[] { 25, 36, 85, 45, 69, 45, 85, 33, 79 };
|
||||
|
||||
|
||||
PieSeriesCollection.Clear();
|
||||
|
||||
for (int i = 0; i < PieValues.Length; i++)
|
||||
{
|
||||
PieSeriesCollection.Add(new PieSeries
|
||||
{
|
||||
Title = s[i],
|
||||
Values = new ChartValues<int> { PieValuesCount[i] },
|
||||
DataLabels = false,
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 图形数据集合
|
||||
/// </summary>
|
||||
[ObservableProperty]
|
||||
SeriesCollection _rowSeriesCollection;
|
||||
|
||||
/// <summary>
|
||||
/// 运行里程集合
|
||||
/// </summary>
|
||||
[ObservableProperty]
|
||||
ChartValues<double> _rowValues;
|
||||
|
||||
List<Brush> brushes = new List<Brush>()
|
||||
{
|
||||
Brushes.DarkGreen,
|
||||
Brushes.Salmon,
|
||||
Brushes.MediumSpringGreen,
|
||||
Brushes.SlateBlue,
|
||||
Brushes.Purple,
|
||||
Brushes.LightPink,
|
||||
Brushes.Firebrick,
|
||||
Brushes.DarkOrange,
|
||||
Brushes.DeepSkyBlue,
|
||||
Brushes.Yellow,
|
||||
Brushes.Blue,
|
||||
Brushes.OliveDrab,
|
||||
Brushes.Tan,
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
/// 标题集合
|
||||
/// </summary>
|
||||
[ObservableProperty]
|
||||
string[] _rowSeriesTitles;
|
||||
|
||||
/// <summary>
|
||||
/// 里程统计条形图初始化
|
||||
/// </summary>
|
||||
private void GetRowsInitialize()
|
||||
{
|
||||
List<CircleRGVState> states = CircleRGVsViewModel.GetAllCircleRGVState();
|
||||
|
||||
if (states == null) return;
|
||||
|
||||
RowSeriesCollection.Clear();
|
||||
|
||||
//前台数据赋值
|
||||
for (int i = 0; i < states.Count; i++)
|
||||
{
|
||||
RowValues[i] = states[i].Read_Mileage;
|
||||
|
||||
RowSeriesTitles[i] = ($"{i + 1}#环穿");
|
||||
}
|
||||
|
||||
RowSeriesCollection = new SeriesCollection
|
||||
{
|
||||
new RowSeries()
|
||||
{
|
||||
Title = "运行里程(km):",
|
||||
Values = RowValues,
|
||||
RowPadding = 10,
|
||||
MinHeight = 30,
|
||||
Foreground = Brushes.Gray,
|
||||
Fill=Brushes.Transparent,
|
||||
DataLabels = true,
|
||||
Configuration=new LiveCharts.Configurations.CartesianMapper<double>()
|
||||
.Y((value,index)=>index)
|
||||
.X(value=>value)
|
||||
.Fill((value, index) => brushes[index])
|
||||
}
|
||||
};
|
||||
|
||||
//for (int i = 0; i < RowSeriesTitles.Length; i++)
|
||||
//{
|
||||
//RowSeriesCollection.Add(new RowSeries()
|
||||
//{
|
||||
// Title = RowSeriesTitles[i],
|
||||
// Values = new ChartValues<double> { RowValues[i] },
|
||||
// RowPadding = 10,
|
||||
// MinHeight = 30,
|
||||
//});
|
||||
|
||||
//}
|
||||
}
|
||||
|
||||
private void GetRows()
|
||||
{
|
||||
List<CircleRGVState> states = CircleRGVsViewModel.GetAllCircleRGVState();
|
||||
|
||||
if (states == null) return;
|
||||
|
||||
//前台数据赋值
|
||||
for (int i = 0; i < states.Count; i++)
|
||||
{
|
||||
RowValues[i] = states[i].Read_Mileage;
|
||||
|
||||
//RowSeriesTitles[i] = ($"{i + 1}#环穿");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
[ObservableProperty]
|
||||
string[] lineLabels = new[] { "第一周", "第二周", "第三周", "第四周" };
|
||||
|
||||
[ObservableProperty]
|
||||
ChartValues<int> lineValuesCount;
|
||||
|
||||
int[] dValuesWeekLine = new int[4];
|
||||
/// <summary>
|
||||
/// 数据展示3---曲线图面板1---月内(每周)任务数量
|
||||
/// </summary>
|
||||
private void GetLineCountOfWeek()
|
||||
{
|
||||
//X轴---日期
|
||||
//LineLabels = new[] { "第一周", "第二周", "第三周", "第四周" };
|
||||
|
||||
using DataTable? dt = SqlHelper.ExecuteTable(
|
||||
"SELECT COUNT(TASKID) FROM TASK_HISTORY WHERE (TASKSTATE=102 OR TASKSTATE=103 OR TASKSTATE=106) AND FINISHTIME>=@FinishTime1 AND FINISHTIME<@FinishTime UNION ALL " +
|
||||
"SELECT COUNT(TASKID) FROM TASK_HISTORY WHERE (TASKSTATE=102 OR TASKSTATE=103 OR TASKSTATE=106) AND FINISHTIME>=@FinishTime2 AND FINISHTIME<@FinishTime1 UNION ALL " +
|
||||
"SELECT COUNT(TASKID) FROM TASK_HISTORY WHERE (TASKSTATE=102 OR TASKSTATE=103 OR TASKSTATE=106) AND FINISHTIME>=@FinishTime3 AND FINISHTIME<@FinishTime2 UNION ALL " +
|
||||
"SELECT COUNT(TASKID) FROM TASK_HISTORY WHERE (TASKSTATE=102 OR TASKSTATE=103 OR TASKSTATE=106) AND FINISHTIME>=@FinishTime4 AND FINISHTIME<@FinishTime3 "
|
||||
,
|
||||
new System.Data.SqlClient.SqlParameter("@FinishTime", $"{DateTime.Now.AddMonths(1).ToString("yyyy-MM")}-01"),
|
||||
new System.Data.SqlClient.SqlParameter("@FinishTime1", $"{DateTime.Now.ToString("yyyy-MM")}-22"),
|
||||
new System.Data.SqlClient.SqlParameter("@FinishTime2", $"{DateTime.Now.ToString("yyyy-MM")}-15"),
|
||||
new System.Data.SqlClient.SqlParameter("@FinishTime3", $"{DateTime.Now.ToString("yyyy-MM")}-08"),
|
||||
new System.Data.SqlClient.SqlParameter("@FinishTime4", $"{DateTime.Now.ToString("yyyy-MM")}-01")
|
||||
);
|
||||
|
||||
//当日任务量
|
||||
for (int i = 0; i < dValuesWeekLine.Length; i++)
|
||||
{
|
||||
dValuesWeekLine[i] = (int)dt.Rows[3 - i][0];
|
||||
}
|
||||
|
||||
//LineValuesCount.Clear();
|
||||
|
||||
for (int i = 0; i < dValuesWeekLine.Length; i++)
|
||||
{
|
||||
//LineValuesCount.Add(dValues[i]);
|
||||
LineValuesCount[i] = dValuesWeekLine[i];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
[ObservableProperty]
|
||||
string[] lineLabels1;
|
||||
|
||||
/// <summary>
|
||||
/// 空托任务曲线集合初始化
|
||||
/// </summary>
|
||||
[ObservableProperty]
|
||||
ChartValues<int> lineValuesPallets;
|
||||
|
||||
/// <summary>
|
||||
/// 实垛任务曲线集合初始化
|
||||
/// </summary>
|
||||
[ObservableProperty]
|
||||
ChartValues<int> lineValuesGoods;
|
||||
|
||||
int[] dValuesTask = new int[7];
|
||||
|
||||
int[] dValuesTask1 = new int[7];
|
||||
|
||||
/// <summary>
|
||||
/// 数据展示5---曲线图面板2---当日各类型任务数量
|
||||
/// </summary>
|
||||
private void GetLineOfTaskCompare()
|
||||
{
|
||||
LineLabels1 = new[] { GetDate(-6), GetDate(-5), GetDate(-4), GetDate(-3), GetDate(-2), GetDate(-1), GetDate(0) };
|
||||
|
||||
using DataTable? dt = SqlHelper.ExecuteTable(
|
||||
"SELECT COUNT(TASKID) FROM TASK_HISTORY WHERE (TASKSTATE=102 OR TASKSTATE=103 OR TASKSTATE=106) AND TASKTYPE LIKE @TaskType AND FINISHTIME>@FinishTime1 AND FINISHTIME<@FinishTime UNION ALL " +
|
||||
"SELECT COUNT(TASKID) FROM TASK_HISTORY WHERE (TASKSTATE=102 OR TASKSTATE=103 OR TASKSTATE=106) AND TASKTYPE LIKE @TaskType AND FINISHTIME>@FinishTime2 AND FINISHTIME<@FinishTime1 UNION ALL " +
|
||||
"SELECT COUNT(TASKID) FROM TASK_HISTORY WHERE (TASKSTATE=102 OR TASKSTATE=103 OR TASKSTATE=106) AND TASKTYPE LIKE @TaskType AND FINISHTIME>@FinishTime3 AND FINISHTIME<@FinishTime2 UNION ALL " +
|
||||
"SELECT COUNT(TASKID) FROM TASK_HISTORY WHERE (TASKSTATE=102 OR TASKSTATE=103 OR TASKSTATE=106) AND TASKTYPE LIKE @TaskType AND FINISHTIME>@FinishTime4 AND FINISHTIME<@FinishTime3 UNION ALL " +
|
||||
"SELECT COUNT(TASKID) FROM TASK_HISTORY WHERE (TASKSTATE=102 OR TASKSTATE=103 OR TASKSTATE=106) AND TASKTYPE LIKE @TaskType AND FINISHTIME>@FinishTime5 AND FINISHTIME<@FinishTime4 UNION ALL " +
|
||||
"SELECT COUNT(TASKID) FROM TASK_HISTORY WHERE (TASKSTATE=102 OR TASKSTATE=103 OR TASKSTATE=106) AND TASKTYPE LIKE @TaskType AND FINISHTIME>@FinishTime6 AND FINISHTIME<@FinishTime5 UNION ALL " +
|
||||
"SELECT COUNT(TASKID) FROM TASK_HISTORY WHERE (TASKSTATE=102 OR TASKSTATE=103 OR TASKSTATE=106) AND TASKTYPE LIKE @TaskType AND FINISHTIME>@FinishTime7 AND FINISHTIME<@FinishTime6 UNION ALL " +
|
||||
"SELECT COUNT(TASKID) FROM TASK_HISTORY WHERE (TASKSTATE=102 OR TASKSTATE=103 OR TASKSTATE=106) AND TASKTYPE LIKE @TaskType1 AND FINISHTIME>@FinishTime1 AND FINISHTIME<@FinishTime UNION ALL " +
|
||||
"SELECT COUNT(TASKID) FROM TASK_HISTORY WHERE (TASKSTATE=102 OR TASKSTATE=103 OR TASKSTATE=106) AND TASKTYPE LIKE @TaskType1 AND FINISHTIME>@FinishTime2 AND FINISHTIME<@FinishTime1 UNION ALL " +
|
||||
"SELECT COUNT(TASKID) FROM TASK_HISTORY WHERE (TASKSTATE=102 OR TASKSTATE=103 OR TASKSTATE=106) AND TASKTYPE LIKE @TaskType1 AND FINISHTIME>@FinishTime3 AND FINISHTIME<@FinishTime2 UNION ALL " +
|
||||
"SELECT COUNT(TASKID) FROM TASK_HISTORY WHERE (TASKSTATE=102 OR TASKSTATE=103 OR TASKSTATE=106) AND TASKTYPE LIKE @TaskType1 AND FINISHTIME>@FinishTime4 AND FINISHTIME<@FinishTime3 UNION ALL " +
|
||||
"SELECT COUNT(TASKID) FROM TASK_HISTORY WHERE (TASKSTATE=102 OR TASKSTATE=103 OR TASKSTATE=106) AND TASKTYPE LIKE @TaskType1 AND FINISHTIME>@FinishTime5 AND FINISHTIME<@FinishTime4 UNION ALL " +
|
||||
"SELECT COUNT(TASKID) FROM TASK_HISTORY WHERE (TASKSTATE=102 OR TASKSTATE=103 OR TASKSTATE=106) AND TASKTYPE LIKE @TaskType1 AND FINISHTIME>@FinishTime6 AND FINISHTIME<@FinishTime5 UNION ALL " +
|
||||
"SELECT COUNT(TASKID) FROM TASK_HISTORY WHERE (TASKSTATE=102 OR TASKSTATE=103 OR TASKSTATE=106) AND TASKTYPE LIKE @TaskType1 AND FINISHTIME>@FinishTime7 AND FINISHTIME<@FinishTime6",
|
||||
new System.Data.SqlClient.SqlParameter("@TaskType", "10%"),
|
||||
new System.Data.SqlClient.SqlParameter("@TaskType1", "11%"),
|
||||
new System.Data.SqlClient.SqlParameter("@FinishTime", GetDate(1)),
|
||||
new System.Data.SqlClient.SqlParameter("@FinishTime1", GetDate(0)),
|
||||
new System.Data.SqlClient.SqlParameter("@FinishTime2", GetDate(-1)),
|
||||
new System.Data.SqlClient.SqlParameter("@FinishTime3", GetDate(-2)),
|
||||
new System.Data.SqlClient.SqlParameter("@FinishTime4", GetDate(-3)),
|
||||
new System.Data.SqlClient.SqlParameter("@FinishTime5", GetDate(-4)),
|
||||
new System.Data.SqlClient.SqlParameter("@FinishTime6", GetDate(-5)),
|
||||
new System.Data.SqlClient.SqlParameter("@FinishTime7", GetDate(-6))
|
||||
);
|
||||
|
||||
//各类型任务数据
|
||||
for (int i = 0; i < dValuesTask.Length; i++)
|
||||
{
|
||||
dValuesTask[i] = (int)dt.Rows[6 - i][0];
|
||||
}
|
||||
|
||||
|
||||
for (int i = 0; i < dValuesTask.Length; i++)
|
||||
{
|
||||
//LineValuesStockIn.Add(dValues[i]);
|
||||
LineValuesPallets[i] = dValuesTask[i];
|
||||
}
|
||||
|
||||
//重置数据
|
||||
for (int i = 0; i < dValuesTask1.Length; i++)
|
||||
{
|
||||
dValuesTask1[i] = (int)dt.Rows[6 + 7 - i][0];
|
||||
}
|
||||
|
||||
for (int i = 0; i < dValuesTask1.Length; i++)
|
||||
{
|
||||
//LineValuesStockOut.Add(dValues2[i]);
|
||||
LineValuesGoods[i] = dValuesTask1[i];
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取时间字符串
|
||||
/// </summary>
|
||||
/// <param name="i">以当天为准偏移i天</param>
|
||||
/// <returns>偏移天数</returns>
|
||||
string GetDate(int i)
|
||||
{
|
||||
return DateTime.Now.AddDays(i).ToString(TimeFormat.stringFormatDateOnly);
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
772
WPFWCSDemo/ViewModels/DbViews/TaskDbViewModel.cs
Normal file
772
WPFWCSDemo/ViewModels/DbViews/TaskDbViewModel.cs
Normal 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();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
641
WPFWCSDemo/ViewModels/DbViews/TaskHistoryDbViewModel.cs
Normal file
641
WPFWCSDemo/ViewModels/DbViews/TaskHistoryDbViewModel.cs
Normal 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} 页";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
66
WPFWCSDemo/ViewModels/DevicesNavigationViewModel.cs
Normal file
66
WPFWCSDemo/ViewModels/DevicesNavigationViewModel.cs
Normal file
@@ -0,0 +1,66 @@
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
using CommunityToolkit.Mvvm.Input;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Controls;
|
||||
|
||||
namespace WPFWCSDemo.ViewModels
|
||||
{
|
||||
public partial class DevicesNavigationViewModel:ObservableObject
|
||||
{
|
||||
private readonly Frame _navigationFrame;
|
||||
public DevicesNavigationViewModel(Frame navigationFrame)
|
||||
{
|
||||
_navigationFrame = navigationFrame;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 打开设备清单
|
||||
/// </summary>
|
||||
[RelayCommand]
|
||||
void OpenDevicePage()
|
||||
{
|
||||
_navigationFrame.Navigate(new Uri($"Views\\Devices\\DeviceListView.xaml", UriKind.Relative));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 打开堆垛机窗口
|
||||
/// </summary>
|
||||
[RelayCommand]
|
||||
void OpenStackerPage()
|
||||
{
|
||||
_navigationFrame.Navigate(new Uri($"Views\\Devices\\StackersView.xaml", UriKind.Relative));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 打开输送机窗口
|
||||
/// </summary>
|
||||
[RelayCommand]
|
||||
void OpenConvPage()
|
||||
{
|
||||
_navigationFrame.Navigate(new Uri($"Views\\Devices\\ConvsView.xaml", UriKind.Relative));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 打开提升机窗口
|
||||
/// </summary>
|
||||
[RelayCommand]
|
||||
void OpenLiftPage()
|
||||
{
|
||||
_navigationFrame.Navigate(new Uri($"Views\\Devices\\LiftsView.xaml", UriKind.Relative));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 打开RGV窗口
|
||||
/// </summary>
|
||||
[RelayCommand]
|
||||
void OpenRGVPage()
|
||||
{
|
||||
_navigationFrame.Navigate(new Uri($"Views\\Devices\\RGVsView.xaml", UriKind.Relative));
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
12
WPFWCSDemo/ViewModels/DevicesViewModel.cs
Normal file
12
WPFWCSDemo/ViewModels/DevicesViewModel.cs
Normal file
@@ -0,0 +1,12 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace WPFWCSDemo.ViewModels
|
||||
{
|
||||
public class DevicesViewModel
|
||||
{
|
||||
}
|
||||
}
|
||||
12
WPFWCSDemo/ViewModels/HelperViewModel.cs
Normal file
12
WPFWCSDemo/ViewModels/HelperViewModel.cs
Normal file
@@ -0,0 +1,12 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace WPFWCSDemo.ViewModels
|
||||
{
|
||||
class HelperViewModel
|
||||
{
|
||||
}
|
||||
}
|
||||
141
WPFWCSDemo/ViewModels/LineManagementViewModel.cs
Normal file
141
WPFWCSDemo/ViewModels/LineManagementViewModel.cs
Normal file
@@ -0,0 +1,141 @@
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
using CommunityToolkit.Mvvm.Input;
|
||||
using System;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using WPFWCSDemo.Data;
|
||||
|
||||
namespace WPFWCSDemo.ViewModels
|
||||
{
|
||||
public partial class LineManagementViewModel:ObservableObject
|
||||
{
|
||||
public LineManagementViewModel(Window window)
|
||||
{
|
||||
LineManagementDialog = window;
|
||||
|
||||
Caption = "输送线管理";
|
||||
|
||||
Enables = new ObservableCollection<int>();
|
||||
|
||||
InitializeStyle();
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 当前页面
|
||||
/// </summary>
|
||||
[ObservableProperty]
|
||||
string _caption;
|
||||
|
||||
/// <summary>
|
||||
/// 当前页面
|
||||
/// </summary>
|
||||
[ObservableProperty]
|
||||
Window _lineManagementDialog;
|
||||
|
||||
/// <summary>
|
||||
/// 当前页面
|
||||
/// </summary>
|
||||
[ObservableProperty]
|
||||
Color _btnColor;
|
||||
|
||||
|
||||
[RelayCommand]
|
||||
void Accept(Window window)
|
||||
{
|
||||
window.Close();
|
||||
}
|
||||
|
||||
|
||||
[ObservableProperty]
|
||||
ObservableCollection<int> _enables;
|
||||
|
||||
[ObservableProperty]
|
||||
int _e1009;
|
||||
[ObservableProperty]
|
||||
int _e1010;
|
||||
[ObservableProperty]
|
||||
int _e1011;
|
||||
[ObservableProperty]
|
||||
int _e1012;
|
||||
|
||||
|
||||
[ObservableProperty]
|
||||
int _e1002;
|
||||
[ObservableProperty]
|
||||
int _e1004;
|
||||
[ObservableProperty]
|
||||
int _e1006;
|
||||
|
||||
|
||||
[RelayCommand]
|
||||
void StateChange(string targetLocation)
|
||||
{
|
||||
var context = new AppDbContext();
|
||||
|
||||
var res = context.LineState
|
||||
.Where(a => a.Target == int.Parse(targetLocation))
|
||||
.ToList();
|
||||
|
||||
if (res == null) return;
|
||||
|
||||
for (int i = 0; i < res.Count; i++)
|
||||
{
|
||||
if (res[i].IsEnable == 0)
|
||||
{
|
||||
if (MessageBox.Show($"确认要恢复{targetLocation}输送口允许进垛吗?", "警告", MessageBoxButton.OKCancel) == MessageBoxResult.OK)
|
||||
{
|
||||
res[i].IsEnable = 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (MessageBox.Show($"确认要禁止{targetLocation}输送口进垛吗?", "警告", MessageBoxButton.OKCancel) == MessageBoxResult.OK)
|
||||
{
|
||||
res[i].IsEnable = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
context.SaveChanges();
|
||||
|
||||
InitializeStyle();
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 按钮样式初始化
|
||||
/// </summary>
|
||||
void InitializeStyle()
|
||||
{
|
||||
var context = new AppDbContext();
|
||||
|
||||
var results = context.LineState
|
||||
.Select(a=>a.IsEnable)
|
||||
.ToList();
|
||||
|
||||
Enables.Clear();
|
||||
|
||||
foreach (var result in results)
|
||||
{
|
||||
Enables.Add(result);
|
||||
}
|
||||
|
||||
E1009 = Enables[1];
|
||||
E1010 = Enables[2];
|
||||
E1011 = Enables[3];
|
||||
E1012 = Enables[0];
|
||||
E1002 = Enables[5];
|
||||
E1004 = Enables[6];
|
||||
E1006 = Enables[7];
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
201
WPFWCSDemo/ViewModels/LogViewModel.cs
Normal file
201
WPFWCSDemo/ViewModels/LogViewModel.cs
Normal file
@@ -0,0 +1,201 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Reflection.Metadata;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows;
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
using System.Reactive.Linq;
|
||||
using System.Diagnostics;
|
||||
using System.Threading;
|
||||
|
||||
namespace WPFWCSDemo.ViewModels
|
||||
{
|
||||
public partial class LogViewModel : ObservableObject
|
||||
{
|
||||
public LogViewModel()
|
||||
{
|
||||
//更新(当日)日志
|
||||
//Task.Run(() =>
|
||||
//{
|
||||
|
||||
// while (true)
|
||||
// {
|
||||
// try
|
||||
// {
|
||||
// //获取存储日志的字符串
|
||||
// Content = File.ReadAllText(dirPath + @"logs\2024-10-09\Debug.txt");
|
||||
|
||||
// Task.Delay(1000);
|
||||
// }
|
||||
// catch (Exception)
|
||||
// {
|
||||
|
||||
// }
|
||||
|
||||
// }
|
||||
//});
|
||||
|
||||
}
|
||||
|
||||
|
||||
//存放日志文件路径
|
||||
//readonly string dirPath = @"E:\VSProject\WPF\FT472\WPFWCSDemo\bin\Debug\net6.0-windows\";
|
||||
|
||||
//[ObservableProperty]
|
||||
//string _content;
|
||||
|
||||
|
||||
/*
|
||||
#region 下拉框内容初始化
|
||||
//月份选择下拉框
|
||||
cbxMonth.Items.Clear();
|
||||
cbxMonth.Items.Add("-请选择月份-");
|
||||
cbxMonth.Items.Add("一月");
|
||||
cbxMonth.Items.Add("二月");
|
||||
cbxMonth.Items.Add("三月");
|
||||
cbxMonth.Items.Add("四月");
|
||||
cbxMonth.Items.Add("五月");
|
||||
cbxMonth.Items.Add("六月");
|
||||
cbxMonth.Items.Add("七月");
|
||||
cbxMonth.Items.Add("八月");
|
||||
cbxMonth.Items.Add("九月");
|
||||
cbxMonth.Items.Add("十月");
|
||||
cbxMonth.Items.Add("十一月");
|
||||
cbxMonth.Items.Add("十二月");
|
||||
|
||||
//下拉框选择初始化
|
||||
cbxMonth.SelectedIndex = 0;
|
||||
cbxLogName.SelectedIndex = 0;
|
||||
|
||||
#endregion
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 实时日志【内容更新】事件触发
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
private void txtLog_TextChanged(object sender, EventArgs e)
|
||||
{
|
||||
//【搜索】按钮打开当天日志时,令滚动条位于最下
|
||||
txtLog.SelectionStart = txtLog.Text.Length;
|
||||
txtLog.ScrollToCaret();
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 【月份】下拉框的值改变事件--→【日志】名称选择的下拉框也随之变化
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
private void cbxMonth_TextChanged(object sender, EventArgs e)
|
||||
{
|
||||
//日志文件名选择下拉框
|
||||
cbxLogName.Items.Clear();
|
||||
//获取存放日志文件夹所有文件全路径
|
||||
try
|
||||
{
|
||||
//尝试获取路径,否则报错
|
||||
string[] name = Directory.GetDirectories(dirPath);
|
||||
//添加到下拉框
|
||||
cbxLogName.Items.Add("-请选择日志-");
|
||||
for (int i = 0; i < name.Length; i++)
|
||||
{
|
||||
//从文件名筛选符合月份条件的项
|
||||
if (Path.GetFileNameWithoutExtension(name[i]).Contains("-" + cbxMonth.SelectedIndex.ToString("00") + "-"))
|
||||
{
|
||||
//添加当月日志的文件名
|
||||
cbxLogName.Items.Add(Path.GetFileNameWithoutExtension(name[i]));
|
||||
}
|
||||
|
||||
}
|
||||
cbxLogName.SelectedIndex = 0;
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 【搜索】按钮
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
private void btnSearch_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (cbxMonth.SelectedIndex != 0 && cbxLogName.SelectedIndex == 0)
|
||||
{
|
||||
MessageBox.Show("请选择要查找历史日志的时间!");
|
||||
return;
|
||||
}
|
||||
if (cbxMonth.SelectedIndex == 0 && cbxLogName.SelectedIndex == 0) return;
|
||||
try
|
||||
{
|
||||
//判断选择的日志文件日期是否为当天
|
||||
if (cbxLogName.Text.Equals(DateTime.Now.ToString("yyyy-MM-dd")))
|
||||
{
|
||||
//显示实时日志
|
||||
txtLog.Visible = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (cbxMonth.SelectedIndex == 0 && cbxLogName.SelectedIndex == 0) return;
|
||||
//获取选中的路径文件内容
|
||||
txtLogHistory.Text = File.ReadAllText(dirPath + cbxLogName.Text + @"/Info.log", Encoding.Default);
|
||||
//隐藏实时日志---显示历史日志
|
||||
txtLog.Visible = false;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show(ex.Message);
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 【取消/刷新】页面按钮
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
private void btnCancel_Click(object sender, EventArgs e)
|
||||
{
|
||||
//【搜索】按钮打开当天日志时,令滚动条位于最下,相比根据【内容更新】事件触发此效果可能存在的时间间隔有观感提升
|
||||
txtLog.SelectionStart = txtLog.Text.Length;
|
||||
txtLog.ScrollToCaret();
|
||||
//显示实时日志
|
||||
txtLog.Visible = true;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 打开当日的日志文档
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
private void btnOpenFile_Click(object sender, EventArgs e)
|
||||
{
|
||||
//打开当日的日志文档
|
||||
//Process.Start("notepad", dirPath + DateTime.Now.ToString("yyyy-MM-dd") + "/Info.log");
|
||||
if (Directory.Exists(dirPath + DateTime.Now.ToString("yyyy-MM-dd")))
|
||||
{
|
||||
Process.Start(dirPath + DateTime.Now.ToString("yyyy-MM-dd"));
|
||||
}
|
||||
else
|
||||
{
|
||||
Process.Start(dirPath);
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
}
|
||||
}
|
||||
454
WPFWCSDemo/ViewModels/MainViewModel.cs
Normal file
454
WPFWCSDemo/ViewModels/MainViewModel.cs
Normal file
@@ -0,0 +1,454 @@
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
using CommunityToolkit.Mvvm.Input;
|
||||
using MaterialDesignThemes.Wpf;
|
||||
using Serilog;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Navigation;
|
||||
using System.Windows.Threading;
|
||||
using System.Xml.Linq;
|
||||
using WPFWCSDemo.Models;
|
||||
using WPFWCSDemo.Models.Devices.CircleRGVStation;
|
||||
using WPFWCSDemo.Schedules;
|
||||
using WPFWCSDemo.Schedules.CircleRGV;
|
||||
using WPFWCSDemo.StateCode;
|
||||
using WPFWCSDemo.Utilities;
|
||||
using WPFWCSDemo.Views;
|
||||
using WPFWCSDemo.Views.CustomComponent;
|
||||
using WPFWCSDemo.Views.Devices;
|
||||
|
||||
namespace WPFWCSDemo.ViewModels
|
||||
{
|
||||
/// <summary>
|
||||
/// 母窗体
|
||||
public partial class MainViewModel : ObservableObject
|
||||
{
|
||||
/// <summary>
|
||||
/// 用于监控请求值的定时器
|
||||
/// </summary>
|
||||
private readonly DispatcherTimer dispatcherTimer;
|
||||
|
||||
/// <summary>
|
||||
/// 用于接收View中导航用的Frame控件,此项目中使用Frame作为导航母控件
|
||||
/// </summary>
|
||||
private readonly Frame _navigationFrame;
|
||||
|
||||
/// </summary>
|
||||
public MainViewModel(Frame navigationFrame)
|
||||
{
|
||||
_menuBar = new ObservableCollection<MenuBar>();
|
||||
CreateMenu();
|
||||
|
||||
_navigationFrame = navigationFrame;
|
||||
|
||||
|
||||
// 设置定时器属性
|
||||
dispatcherTimer = new DispatcherTimer();
|
||||
dispatcherTimer.Interval = TimeSpan.FromSeconds(1); // 设置时间间隔为1秒
|
||||
dispatcherTimer.Tick += DispatcherTimer_Tick; // 添加事件处理程序
|
||||
dispatcherTimer.Start(); // 启动计时器
|
||||
|
||||
//ScheduleTask();
|
||||
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 定时执行的调度任务
|
||||
/// </summary>
|
||||
private static void ScheduleTask()
|
||||
{
|
||||
|
||||
Task.Factory.StartNew(() =>
|
||||
{
|
||||
while (true)
|
||||
{
|
||||
|
||||
// //更新任务状态
|
||||
// CircleRGVSchedule.UpdateScheduleState();
|
||||
|
||||
//Excute.ExecuteTask();
|
||||
|
||||
//Update.UpdateDeviceNumber();
|
||||
|
||||
//Update.UpdateScheduleState();
|
||||
|
||||
//Generate.GenerateTask();
|
||||
|
||||
////Common.RecordRequestValue();
|
||||
//Log.Information($"-----------------设备调度-----------------");
|
||||
|
||||
// ////任务处理
|
||||
// TaskFinishSchedule.TaskFinish();
|
||||
|
||||
// TaskFinishSchedule.TaskDelete();
|
||||
|
||||
// TaskFinishSchedule.TaskForSendFailedHandler();
|
||||
|
||||
// TaskFinishSchedule.TaskExceptionHandler();
|
||||
|
||||
// //RGV调度
|
||||
// CircleRGVSchedule.GenerateTask();
|
||||
|
||||
// CircleRGVSchedule.ExecuteTask();
|
||||
|
||||
// Task.Delay(200).Wait();
|
||||
|
||||
}
|
||||
}, TaskCreationOptions.LongRunning);
|
||||
|
||||
|
||||
Task.Factory.StartNew(() =>
|
||||
{
|
||||
while (true)
|
||||
{
|
||||
//实时报警
|
||||
AlarmViewModel.RealTimeAlarm();
|
||||
|
||||
Task.Delay(1000).Wait();
|
||||
}
|
||||
}, TaskCreationOptions.LongRunning);
|
||||
|
||||
|
||||
//自动备份
|
||||
//Task.Run(() =>
|
||||
//{
|
||||
// while (true)
|
||||
// {
|
||||
// GlobalTask.SqlBackupForTime();
|
||||
|
||||
// Task.Delay(TimeSpan.FromHours(5)).Wait();
|
||||
// }
|
||||
//});
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// ListBox选择项
|
||||
/// </summary>
|
||||
[ObservableProperty]
|
||||
MenuBar? _selectedMenuBar;
|
||||
|
||||
[ObservableProperty]
|
||||
ObservableCollection<MenuBar> _menuBar;
|
||||
|
||||
#region 输送口请求指示
|
||||
|
||||
[ObservableProperty]
|
||||
bool _getRequest_1001;
|
||||
|
||||
[ObservableProperty]
|
||||
bool _getRequest_1003;
|
||||
|
||||
[ObservableProperty]
|
||||
bool _getRequest_1005;
|
||||
|
||||
[ObservableProperty]
|
||||
bool _getRequest_1007;
|
||||
|
||||
[ObservableProperty]
|
||||
bool _getRequest_1008;
|
||||
|
||||
[ObservableProperty]
|
||||
bool _getRequest_1013;
|
||||
|
||||
[ObservableProperty]
|
||||
bool _putRequest_1002;
|
||||
|
||||
[ObservableProperty]
|
||||
bool _putRequest_1004;
|
||||
|
||||
[ObservableProperty]
|
||||
bool _putRequest_1006;
|
||||
|
||||
[ObservableProperty]
|
||||
bool _putRequest_1009;
|
||||
|
||||
[ObservableProperty]
|
||||
bool _putRequest_1010;
|
||||
|
||||
|
||||
[ObservableProperty]
|
||||
int _permission_Station;
|
||||
|
||||
#endregion
|
||||
|
||||
#region 输送口请求 - 显隐性
|
||||
|
||||
[ObservableProperty]
|
||||
Visibility _getRequest_LineA_Visible;
|
||||
|
||||
[ObservableProperty]
|
||||
Visibility _getRequest_LineB_Visible;
|
||||
|
||||
[ObservableProperty]
|
||||
Visibility _getRequest_LineC_Visible;
|
||||
|
||||
[ObservableProperty]
|
||||
Visibility _getRequest_LineD_Visible;
|
||||
|
||||
[ObservableProperty]
|
||||
Visibility _getRequest_LineAB_Visible;
|
||||
|
||||
[ObservableProperty]
|
||||
Visibility _putRequest_LineB_Visible;
|
||||
|
||||
[ObservableProperty]
|
||||
Visibility _getRequest_LineCD_Visible;
|
||||
|
||||
[ObservableProperty]
|
||||
Visibility _putRequest_LineC_Visible;
|
||||
|
||||
#endregion
|
||||
|
||||
private void DispatcherTimer_Tick(object? sender, EventArgs e)
|
||||
{
|
||||
using CircleRGVStationState circleRGVStationState = CircleRGVsViewModel.GetCircleRGVStaionState();
|
||||
|
||||
if (circleRGVStationState == null) return;
|
||||
|
||||
GetRequest_1001 = circleRGVStationState.Read_GetRequest_1001;
|
||||
GetRequest_1003 = circleRGVStationState.Read_GetRequest_1003;
|
||||
GetRequest_1005 = circleRGVStationState.Read_GetRequest_1005;
|
||||
GetRequest_1007 = circleRGVStationState.Read_GetRequest_1007;
|
||||
GetRequest_1008 = circleRGVStationState.Read_GetRequest_1008;
|
||||
|
||||
GetRequest_1007 = circleRGVStationState.Read_GetRequest_1007;
|
||||
GetRequest_1008 = circleRGVStationState.Read_GetRequest_1008;
|
||||
|
||||
GetRequest_1013 = circleRGVStationState.Read_GetRequest_1013;
|
||||
PutRequest_1002 = circleRGVStationState.Read_PutRequest_1002;
|
||||
PutRequest_1004 = circleRGVStationState.Read_PutRequest_1004;
|
||||
PutRequest_1006 = circleRGVStationState.Read_PutRequest_1006;
|
||||
|
||||
PutRequest_1009 = circleRGVStationState.Read_PutRequest_1009;
|
||||
PutRequest_1010 = circleRGVStationState.Read_PutRequest_1010;
|
||||
|
||||
Permission_Station = circleRGVStationState.Read_Permission;
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
bool b = false;
|
||||
|
||||
/// <summary>
|
||||
/// ListBox按键导航
|
||||
/// </summary>
|
||||
/// <param name="name"></param>
|
||||
[RelayCommand]
|
||||
void Navigation(string name)
|
||||
{
|
||||
if (string.IsNullOrEmpty(name)) return;
|
||||
|
||||
//【设置】子页导航
|
||||
if (name == "SettingView")
|
||||
{
|
||||
_navigationFrame.Navigate(new Uri($"Views\\Settings\\{name}.xaml", UriKind.Relative));
|
||||
return;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
if (name == nameof(AlarmView) || name == nameof(TaskView)
|
||||
|| name == nameof(AlarmHistoryView) || name == nameof(TaskHistoryView))
|
||||
{
|
||||
if (!SqlHelper.IsDBConnected())
|
||||
{
|
||||
_navigationFrame.Navigate(new Uri($"Views\\BlankView.xaml", UriKind.Relative));
|
||||
|
||||
b = true;
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
//导航页面
|
||||
_navigationFrame.Navigate(new Uri($"Views\\{name}.xaml", UriKind.Relative));
|
||||
|
||||
}
|
||||
catch
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 后退
|
||||
/// </summary>
|
||||
[RelayCommand]
|
||||
void GoBack()
|
||||
{
|
||||
if (b)
|
||||
{
|
||||
//删除【连接错误页面】的导航记录
|
||||
_navigationFrame.NavigationService.RemoveBackEntry();
|
||||
b = false;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
_navigationFrame.NavigationService.GoBack();
|
||||
}
|
||||
catch
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 前进
|
||||
/// </summary>
|
||||
[RelayCommand]
|
||||
void GoForward()
|
||||
{
|
||||
try
|
||||
{
|
||||
_navigationFrame.NavigationService.GoForward();
|
||||
}
|
||||
catch
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 主页
|
||||
/// </summary>
|
||||
[RelayCommand]
|
||||
void Home()
|
||||
{
|
||||
//主页面
|
||||
_navigationFrame.Navigate(new Uri($"Views\\DataInfoView.xaml", UriKind.Relative));
|
||||
}
|
||||
|
||||
|
||||
public void TaskPage()
|
||||
{
|
||||
_navigationFrame.Navigate(new Uri($"Views\\TaskView.xaml", UriKind.Relative));
|
||||
}
|
||||
|
||||
public void TaskHistoryPage()
|
||||
{
|
||||
_navigationFrame.Navigate(new Uri($"Views\\TaskHistoryView.xaml", UriKind.Relative));
|
||||
}
|
||||
|
||||
public void AlarmPage()
|
||||
{
|
||||
_navigationFrame.Navigate(new Uri($"Views\\AlarmView.xaml", UriKind.Relative));
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 设备测试
|
||||
/// </summary>
|
||||
[RelayCommand]
|
||||
void DeviceTest()
|
||||
{
|
||||
//ControllerView controllerView = new ControllerView();
|
||||
//controllerView.ShowDialog(1);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 顶部工具栏打开日志文件夹
|
||||
/// </summary>
|
||||
[RelayCommand]
|
||||
void OpenLog()
|
||||
{
|
||||
string dirPath = @"D:\Logs";
|
||||
if (Directory.Exists(dirPath))
|
||||
{
|
||||
Process.Start("explorer.exe",dirPath);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 顶部工具栏打开设置页
|
||||
/// </summary>
|
||||
[RelayCommand]
|
||||
void OpenSetting()
|
||||
{
|
||||
_navigationFrame.Navigate(new Uri($"Views\\Settings\\SettingView.xaml", UriKind.Relative));
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 输送线管理
|
||||
/// </summary>
|
||||
[RelayCommand]
|
||||
void LineControl()
|
||||
{
|
||||
LineControlDialog dialog = new LineControlDialog();
|
||||
dialog.ShowDialog();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 打开操作手册
|
||||
/// </summary>
|
||||
[RelayCommand]
|
||||
void Helper()
|
||||
{
|
||||
try
|
||||
{
|
||||
string dirPath = @"D:\滁州东鹏饮料二厂环穿WCS系统使用手册.doc";
|
||||
string processPath = @"C:\Program Files\Microsoft Office\Office16\WINWORD.exe";
|
||||
if (File.Exists(dirPath))
|
||||
{
|
||||
Process.Start(processPath,dirPath);
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 导航菜单初始化
|
||||
/// </summary>
|
||||
void CreateMenu()
|
||||
{
|
||||
//生产类画面
|
||||
MenuBar.Add(new MenuBar() { Icon = "Home", Title = "生产看板", NameSpace = nameof(DataInfoView) });
|
||||
//MenuBar.Add(new MenuBar() { Icon = "MonitorScreenshot", Title = "生产监控", NameSpace = nameof(MonitorView) });
|
||||
//MenuBar.Add(new MenuBar() { Icon = "MonitorDashboard", Title = "设备信息", NameSpace = nameof(DevicesNavigationView) });
|
||||
MenuBar.Add(new MenuBar() { Icon = "MonitorDashboard", Title = "环穿状态", NameSpace = nameof(CircleRGVsView) });
|
||||
//报表类画面
|
||||
//MenuBar.Add(new MenuBar() { Icon = "Warehouse", Title = "库存信息", NameSpace = nameof(CargoView) });
|
||||
MenuBar.Add(new MenuBar() { Icon = "AlarmLightOutline", Title = "实时报警", NameSpace = nameof(AlarmView) });
|
||||
MenuBar.Add(new MenuBar() { Icon = "History", Title = "历史报警", NameSpace = nameof(AlarmHistoryView) });
|
||||
MenuBar.Add(new MenuBar() { Icon = "ClipboardTextOutline", Title = "调度任务", NameSpace = nameof(Views.TaskView) });
|
||||
MenuBar.Add(new MenuBar() { Icon = "ClipboardTextClockOutline", Title = "历史任务", NameSpace = nameof(TaskHistoryView) });
|
||||
//其他
|
||||
//MenuBar.Add(new MenuBar() { Icon = "Book", Title = "日志", NameSpace = nameof(LogView) });
|
||||
//MenuBar.Add(new MenuBar() { Icon = "Tools", Title = "设置", NameSpace = nameof(SettingView) });
|
||||
//MenuBar.Add(new MenuBar() { Icon = "CommentQuestionOutline", Title = "帮助", NameSpace = nameof(HelperView) });
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
138
WPFWCSDemo/ViewModels/MonitorViewModel.cs
Normal file
138
WPFWCSDemo/ViewModels/MonitorViewModel.cs
Normal file
@@ -0,0 +1,138 @@
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
using CommunityToolkit.Mvvm.Input;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Data;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Media;
|
||||
using WPFWCSDemo.Models;
|
||||
using WPFWCSDemo.Utilities;
|
||||
|
||||
|
||||
namespace WPFWCSDemo.ViewModels
|
||||
{
|
||||
public partial class MonitorViewModel : ObservableObject
|
||||
{
|
||||
public MonitorViewModel()
|
||||
{
|
||||
WarehouseLayout = new ObservableCollection<WareHouseInfo>();
|
||||
CargoState = new ObservableCollection<Cargo>();
|
||||
InitializeWarehouseLayout(LayersSelectedIndex);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 货位信息
|
||||
/// </summary>
|
||||
[ObservableProperty]
|
||||
ObservableCollection<WareHouseInfo> _warehouseLayout;
|
||||
|
||||
/// <summary>
|
||||
/// 货位状态
|
||||
/// </summary>
|
||||
[ObservableProperty]
|
||||
ObservableCollection<Cargo> _cargoState;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 层数选择
|
||||
/// </summary>
|
||||
[ObservableProperty]
|
||||
int _layersSelectedIndex;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 货位状态绘图初始化
|
||||
/// </summary>
|
||||
private void InitializeWarehouseLayout(int layer)
|
||||
{
|
||||
WarehouseLayout.Clear();
|
||||
CargoState.Clear();
|
||||
|
||||
double cellWidth = 36;
|
||||
double cellHeight = 25;
|
||||
|
||||
DataTable dt = SqlHelper.ExecuteTable("SELECT STATUS FROM CARGOSPACE WHERE FLOOR=@Floor ORDER BY ROW ASC,[COLUMN] ASC ",
|
||||
new System.Data.SqlClient.SqlParameter("@Floor", layer + 1));
|
||||
|
||||
foreach (DataRow item in dt.Rows)
|
||||
{
|
||||
Cargo cargo = new Cargo();
|
||||
cargo.Status = int.Parse(item["Status"].ToString());
|
||||
|
||||
CargoState.Add(cargo);
|
||||
}
|
||||
|
||||
for (int row = 0; row < 8; row++)
|
||||
{
|
||||
for (int col = 0; col < 22; col++)
|
||||
{
|
||||
WareHouseInfo wareHouseInfo = new WareHouseInfo();
|
||||
|
||||
wareHouseInfo.Tooltip = $"排: {row + 1}, 列: {col + 1}, 层: {layer + 1}";
|
||||
|
||||
if (CargoState.First().Status == 1)
|
||||
{
|
||||
//仓位空
|
||||
wareHouseInfo.FillColor = Brushes.Silver;
|
||||
}
|
||||
else if (CargoState.First().Status == 2)
|
||||
{
|
||||
//仓位占用
|
||||
wareHouseInfo.FillColor = Brushes.LawnGreen;
|
||||
}
|
||||
else if (CargoState.First().Status == 3)
|
||||
{
|
||||
//仓位盘点
|
||||
wareHouseInfo.FillColor = Brushes.Orange;
|
||||
}
|
||||
else
|
||||
{
|
||||
//仓位异常
|
||||
wareHouseInfo.FillColor = Brushes.Red;
|
||||
}
|
||||
|
||||
CargoState.RemoveAt(0);
|
||||
|
||||
//设备排列图形间隔
|
||||
wareHouseInfo.X = col * cellWidth + 1 + cellWidth;
|
||||
//wareHouseInfo.Y = row * cellHeight;
|
||||
|
||||
//设置奇偶数排图形间隔
|
||||
if (row % 2 == 0)
|
||||
{
|
||||
wareHouseInfo.Y = (row + (row * 1)) * cellHeight + 40;
|
||||
}
|
||||
else
|
||||
{
|
||||
wareHouseInfo.Y = (row + (row - 1) * 1) * cellHeight + 50;
|
||||
}
|
||||
|
||||
//设置仓位图形缩放中心
|
||||
wareHouseInfo.RenderCenter = new System.Drawing.Point((int)wareHouseInfo.X + (int)(cellWidth / 2 - 3), (int)wareHouseInfo.Y + (int)(cellWidth / 2 - 3));
|
||||
|
||||
WarehouseLayout.Add(wareHouseInfo);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 点击层数切换库存显示
|
||||
/// </summary>
|
||||
[RelayCommand]
|
||||
void LayersSelect()
|
||||
{
|
||||
InitializeWarehouseLayout(LayersSelectedIndex);
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
31
WPFWCSDemo/ViewModels/Settings/AboutViewModel.cs
Normal file
31
WPFWCSDemo/ViewModels/Settings/AboutViewModel.cs
Normal file
@@ -0,0 +1,31 @@
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
using CommunityToolkit.Mvvm.Input;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
using System.Security.Policy;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Controls;
|
||||
|
||||
namespace WPFWCSDemo.ViewModels.Settings
|
||||
{
|
||||
public partial class AboutViewModel:ObservableObject
|
||||
{
|
||||
[RelayCommand]
|
||||
void WebNavigation()
|
||||
{
|
||||
string url = "http://www.yctd.cn/";
|
||||
|
||||
Uri uri = new Uri(url);
|
||||
|
||||
// 使用Process.Start打开默认浏览器
|
||||
Process.Start(new ProcessStartInfo
|
||||
{
|
||||
FileName = uri.ToString(),
|
||||
UseShellExecute = true
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
71
WPFWCSDemo/ViewModels/Settings/SettingViewModel.cs
Normal file
71
WPFWCSDemo/ViewModels/Settings/SettingViewModel.cs
Normal file
@@ -0,0 +1,71 @@
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
using CommunityToolkit.Mvvm.Input;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Controls.Primitives;
|
||||
using System.Xml.Linq;
|
||||
using WPFWCSDemo.Models;
|
||||
using WPFWCSDemo.Utilities;
|
||||
using WPFWCSDemo.ViewModels.Settings;
|
||||
using WPFWCSDemo.Views.Settings;
|
||||
|
||||
namespace WPFWCSDemo.ViewModels
|
||||
{
|
||||
public partial class SettingViewModel : ObservableObject
|
||||
{
|
||||
private readonly Frame frame;
|
||||
public SettingViewModel(Frame navigationFrame)
|
||||
{
|
||||
frame = navigationFrame;
|
||||
|
||||
Menu = new ObservableCollection<SettingMenu>();
|
||||
CreateSettingMenu();
|
||||
|
||||
SkinViewModel.GetFrame(frame);
|
||||
|
||||
frame.Navigate(new Uri($"Views\\Settings\\SystemView.xaml", UriKind.Relative));
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 菜单选择项
|
||||
/// </summary>
|
||||
[ObservableProperty]
|
||||
ObservableCollection<SettingMenu> _menu;
|
||||
|
||||
|
||||
void CreateSettingMenu()
|
||||
{
|
||||
Menu.Add(new SettingMenu() { Icon = "Pencil", Title = "个性化", NameSpace = "SkinView"/*nameof(SkinView)*/ });
|
||||
Menu.Add(new SettingMenu() { Icon = "Tools", Title = "系统设置", NameSpace = "SystemView" });
|
||||
Menu.Add(new SettingMenu() { Icon = "ExclamationThick", Title = "关于", NameSpace = "AboutView" });
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 切换导航
|
||||
/// </summary>
|
||||
/// <param name="name"></param>
|
||||
[RelayCommand]
|
||||
void SettingNavigate(SettingMenu menu)
|
||||
{
|
||||
try
|
||||
{
|
||||
frame.Navigate(new Uri($"Views\\Settings\\{menu.NameSpace}.xaml", UriKind.Relative));
|
||||
}
|
||||
catch
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
77
WPFWCSDemo/ViewModels/Settings/SkinViewModel.cs
Normal file
77
WPFWCSDemo/ViewModels/Settings/SkinViewModel.cs
Normal file
@@ -0,0 +1,77 @@
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
using CommunityToolkit.Mvvm.Input;
|
||||
using MaterialDesignColors;
|
||||
using MaterialDesignColors.ColorManipulation;
|
||||
using MaterialDesignThemes.Wpf;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Media;
|
||||
|
||||
namespace WPFWCSDemo.ViewModels.Settings
|
||||
{
|
||||
public partial class SkinViewModel:ObservableObject
|
||||
{
|
||||
[ObservableProperty]
|
||||
static Frame frame;
|
||||
|
||||
public IEnumerable<ISwatch> Swatches { get; } = SwatchHelper.Swatches;
|
||||
|
||||
|
||||
//深浅色切换
|
||||
private bool _isDarkTheme;
|
||||
public bool IsDarkTheme
|
||||
{
|
||||
get => _isDarkTheme;
|
||||
set
|
||||
{
|
||||
if (SetProperty(ref _isDarkTheme, value))
|
||||
{
|
||||
ModifyTheme(theme => theme.SetBaseTheme(value ? Theme.Dark : Theme.Light));
|
||||
}
|
||||
}
|
||||
}
|
||||
//切换主题
|
||||
private static void ModifyTheme(Action<ITheme> modificationAction)
|
||||
{
|
||||
var paletteHelper = new PaletteHelper();
|
||||
ITheme theme = paletteHelper.GetTheme();
|
||||
|
||||
modificationAction?.Invoke(theme);
|
||||
|
||||
paletteHelper.SetTheme(theme);
|
||||
}
|
||||
|
||||
|
||||
|
||||
private readonly PaletteHelper paletteHelper = new PaletteHelper();
|
||||
|
||||
/// <summary>
|
||||
/// 改变颜色
|
||||
/// </summary>
|
||||
/// <param name="obj"></param>
|
||||
[RelayCommand]
|
||||
public void ChangeHue(object? obj)
|
||||
{
|
||||
var hue = (Color)obj!;
|
||||
|
||||
ITheme theme = paletteHelper.GetTheme();
|
||||
|
||||
theme.PrimaryLight = new ColorPair(hue.Lighten());
|
||||
theme.PrimaryMid = new ColorPair(hue);
|
||||
theme.PrimaryDark = new ColorPair(hue.Darken());
|
||||
|
||||
paletteHelper.SetTheme(theme);
|
||||
}
|
||||
|
||||
|
||||
public static void GetFrame(Frame navigationFrame)
|
||||
{
|
||||
frame = navigationFrame;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
389
WPFWCSDemo/ViewModels/Settings/SystemViewModel.cs
Normal file
389
WPFWCSDemo/ViewModels/Settings/SystemViewModel.cs
Normal file
@@ -0,0 +1,389 @@
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
using CommunityToolkit.Mvvm.Input;
|
||||
using MaterialDesignThemes.Wpf;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data.SqlClient;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using WPFWCSDemo.Models;
|
||||
using WPFWCSDemo.Schedules;
|
||||
using WPFWCSDemo.StateCode;
|
||||
using WPFWCSDemo.Utilities;
|
||||
using WPFWCSDemo.Views;
|
||||
|
||||
namespace WPFWCSDemo.ViewModels.Settings
|
||||
{
|
||||
public partial class SystemViewModel:ObservableObject
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
/// 选中删除任务数据
|
||||
/// </summary>
|
||||
[ObservableProperty]
|
||||
bool _isTaskDataDelete;
|
||||
|
||||
/// <summary>
|
||||
/// 选中删除报警数据
|
||||
/// </summary>
|
||||
[ObservableProperty]
|
||||
bool _isAlarmDataDelete;
|
||||
|
||||
/// <summary>
|
||||
/// 实垛A线显示文本
|
||||
/// </summary>
|
||||
[ObservableProperty]
|
||||
string _lineAStr = "重置A线请求标志";
|
||||
/// <summary>
|
||||
/// 实垛B线显示文本
|
||||
/// </summary>
|
||||
[ObservableProperty]
|
||||
string _lineBStr = "重置B线请求标志";
|
||||
/// <summary>
|
||||
/// 实垛C线显示文本
|
||||
/// </summary>
|
||||
[ObservableProperty]
|
||||
string _lineCStr = "重置C线请求标志";
|
||||
/// <summary>
|
||||
/// 实垛D线显示文本
|
||||
/// </summary>
|
||||
[ObservableProperty]
|
||||
string _lineDStr = "重置D线请求标志";
|
||||
/// <summary>
|
||||
/// 实垛AB线显示文本
|
||||
/// </summary>
|
||||
[ObservableProperty]
|
||||
string _lineABStr = "重置AB线请求标志";
|
||||
/// <summary>
|
||||
/// 实垛CD线显示文本
|
||||
/// </summary>
|
||||
[ObservableProperty]
|
||||
string _lineCDStr = "重置CD线请求标志";
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 是否限制实垛A线生成任务 0-解禁 1-禁止
|
||||
/// </summary>
|
||||
[ObservableProperty]
|
||||
bool _lineAIsEnable = true;
|
||||
/// <summary>
|
||||
/// 是否限制实垛B线生成任务 0-解禁 1-禁止
|
||||
/// </summary>
|
||||
[ObservableProperty]
|
||||
bool _lineBIsEnable = true;
|
||||
/// <summary>
|
||||
/// 是否限制实垛C线生成任务 0-解禁 1-禁止
|
||||
/// </summary>
|
||||
[ObservableProperty]
|
||||
bool _lineCIsEnable = true;
|
||||
/// <summary>
|
||||
/// 是否限制实垛D线生成任务 0-解禁 1-禁止
|
||||
/// </summary>
|
||||
[ObservableProperty]
|
||||
bool _lineDIsEnable = true;
|
||||
/// <summary>
|
||||
/// 是否限制空托AB线生成任务 0-解禁 1-禁止
|
||||
/// </summary>
|
||||
[ObservableProperty]
|
||||
bool _lineABIsEnable = true;
|
||||
/// <summary>
|
||||
/// 是否限制空托CD线生成任务 0-解禁 1-禁止
|
||||
/// </summary>
|
||||
[ObservableProperty]
|
||||
bool _lineCDIsEnable = true;
|
||||
|
||||
/// <summary>
|
||||
/// A手动允许下发标志
|
||||
/// </summary>
|
||||
public static bool lineAIsEnable = true;
|
||||
/// <summary>
|
||||
/// B手动允许下发标志
|
||||
/// </summary>
|
||||
public static bool lineBIsEnable = true;
|
||||
/// <summary>
|
||||
/// C手动允许下发标志
|
||||
/// </summary>
|
||||
public static bool lineCIsEnable = true;
|
||||
/// <summary>
|
||||
/// D手动允许下发标志
|
||||
/// </summary>
|
||||
public static bool lineDIsEnable = true;
|
||||
/// <summary>
|
||||
/// AB手动允许下发标志
|
||||
/// </summary>
|
||||
public static bool lineABIsEnable = true;
|
||||
/// <summary>
|
||||
/// CD手动允许下发标志
|
||||
/// </summary>
|
||||
public static bool lineCDIsEnable = true;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 手动备份当前数据库
|
||||
/// </summary>
|
||||
[RelayCommand]
|
||||
void GetSqlDBBackup()
|
||||
{
|
||||
if (MessageBox.Show("确定创建备份文件吗(此操作会生成一份备份文件)?", "提示", MessageBoxButton.YesNo) == MessageBoxResult.Yes)
|
||||
{
|
||||
SqlDatabaseMaintenance.SQLBackup();
|
||||
}
|
||||
else
|
||||
{
|
||||
MessageBox.Show("操作已取消");
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 清除近3个月之外所有任务记录(保留最近3个月内数据)
|
||||
/// </summary>
|
||||
[RelayCommand]
|
||||
void DeleteDataOutOfTreeMouths()
|
||||
{
|
||||
if (MessageBox.Show("确定删除数据吗(此操作会保留最近3个月内的数据,且删除最近3个月之外的数据)?", "提示", MessageBoxButton.YesNo) == MessageBoxResult.Yes)
|
||||
{
|
||||
SqlHelper.ExecuteNonQuery("DELETE FROM TASK_HISTORY WHERE FINISHTIME<@FinishTime",
|
||||
new SqlParameter("@FinishTime", DateTime.Now.AddMonths(-3).ToString("yyyy-MM"))
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 调度任务备份
|
||||
/// </summary>
|
||||
[RelayCommand]
|
||||
void TaskBackup()
|
||||
{
|
||||
if (MessageBox.Show("确定创建备份文件吗?", "提示", MessageBoxButton.YesNo) == MessageBoxResult.Yes)
|
||||
{
|
||||
if (IsTaskDataDelete)
|
||||
{
|
||||
if (MessageBox.Show("将删除已备份的【调度任务历史记录】数据,是否继续?", "提示", MessageBoxButton.YesNo) == MessageBoxResult.Yes)
|
||||
{
|
||||
SqlDatabaseMaintenance.SQLTaskBackup("Month", -6, IsTaskDataDelete);
|
||||
}
|
||||
else
|
||||
{
|
||||
MessageBox.Show("备份操作已取消");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//选择仅备份不删除数据
|
||||
SqlDatabaseMaintenance.SQLTaskBackup("Month", -6, false);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 历史报警备份
|
||||
/// </summary>
|
||||
[RelayCommand]
|
||||
void AlarmBackup()
|
||||
{
|
||||
if (MessageBox.Show("确定创建备份文件吗?", "提示", MessageBoxButton.YesNo) == MessageBoxResult.Yes)
|
||||
{
|
||||
if (IsAlarmDataDelete)
|
||||
{
|
||||
if (MessageBox.Show("将删除已备份的【报警历史记录】数据,是否继续?", "提示", MessageBoxButton.YesNo) == MessageBoxResult.Yes)
|
||||
{
|
||||
SqlDatabaseMaintenance.SQLAlarmBackup("Month", -6, IsAlarmDataDelete);
|
||||
}
|
||||
else
|
||||
{
|
||||
MessageBox.Show("备份操作已取消");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//选择仅备份不删除数据
|
||||
SqlDatabaseMaintenance.SQLAlarmBackup("Month", -6, false);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 货位初始化
|
||||
/// </summary>
|
||||
[RelayCommand]
|
||||
void CargoInitialize()
|
||||
{
|
||||
string result = Microsoft.VisualBasic.Interaction.InputBox("Enter something:", "Input Dialog", "");
|
||||
MessageBox.Show("You entered: " + result);
|
||||
CargoTableInitialize.CargoSpaceInit(10,50,5);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 手动控制输送线是否允许下发任务 true-允许 false-禁止
|
||||
/// </summary>
|
||||
/// <param name="lineName">实垛:A,B,C,D 空托:AB,CD</param>
|
||||
[RelayCommand]
|
||||
void LineIsEnabled(string lineName)
|
||||
{
|
||||
switch (lineName)
|
||||
{
|
||||
case "A":
|
||||
if (LineAIsEnable)
|
||||
{
|
||||
if (MessageBox.Show("是否禁止A线生成任务?", "警告", MessageBoxButton.OKCancel) == MessageBoxResult.OK)
|
||||
{
|
||||
LineAIsEnable = false;
|
||||
lineAIsEnable = false;
|
||||
LineAStr = "禁止下发";
|
||||
|
||||
SqlHelper.NewEventLog($"人工完成任务:{lineName}线切换为【{LineAStr}】", "USER");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (MessageBox.Show("是否允许A线生成任务?", "警告", MessageBoxButton.OKCancel) == MessageBoxResult.OK)
|
||||
{
|
||||
LineAIsEnable = true;
|
||||
lineAIsEnable = true;
|
||||
LineAStr = "允许下发";
|
||||
|
||||
SqlHelper.NewEventLog($"人工完成任务:{lineName}线切换为【{LineAStr}】", "USER");
|
||||
}
|
||||
}
|
||||
break;
|
||||
case "B":
|
||||
if (LineBIsEnable)
|
||||
{
|
||||
if (MessageBox.Show("是否禁止B线生成任务?", "警告", MessageBoxButton.OKCancel) == MessageBoxResult.OK)
|
||||
{
|
||||
LineBIsEnable = false;
|
||||
lineBIsEnable = false;
|
||||
LineBStr = "禁止下发";
|
||||
|
||||
SqlHelper.NewEventLog($"人工完成任务:{lineName}线切换为【{LineBStr}】", "USER");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (MessageBox.Show("是否允许B线生成任务?", "警告", MessageBoxButton.OKCancel) == MessageBoxResult.OK)
|
||||
{
|
||||
LineBIsEnable = true;
|
||||
lineBIsEnable = true;
|
||||
LineBStr = "允许下发";
|
||||
|
||||
SqlHelper.NewEventLog($"人工完成任务:{lineName}线切换为【{LineBStr}】", "USER");
|
||||
}
|
||||
}
|
||||
break;
|
||||
case "C":
|
||||
if (LineCIsEnable)
|
||||
{
|
||||
if (MessageBox.Show("是否禁止C线生成任务?", "警告", MessageBoxButton.OKCancel) == MessageBoxResult.OK)
|
||||
{
|
||||
LineCIsEnable = false;
|
||||
lineCIsEnable = false;
|
||||
LineCStr = "禁止下发";
|
||||
|
||||
SqlHelper.NewEventLog($"人工完成任务:{lineName}线切换为【{LineCStr}】", "USER");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (MessageBox.Show("是否允许C线生成任务?", "警告", MessageBoxButton.OKCancel) == MessageBoxResult.OK)
|
||||
{
|
||||
LineCIsEnable = true;
|
||||
lineCIsEnable = true;
|
||||
LineCStr = "允许下发";
|
||||
|
||||
SqlHelper.NewEventLog($"人工完成任务:{lineName}线切换为【{LineCStr}】", "USER");
|
||||
}
|
||||
}
|
||||
break;
|
||||
case "D":
|
||||
if (LineDIsEnable)
|
||||
{
|
||||
if (MessageBox.Show("是否禁止D线生成任务?", "警告", MessageBoxButton.OKCancel) == MessageBoxResult.OK)
|
||||
{
|
||||
LineDIsEnable = false;
|
||||
lineDIsEnable = false;
|
||||
LineDStr = "禁止下发";
|
||||
|
||||
SqlHelper.NewEventLog($"人工完成任务:{lineName}线切换为【{LineDStr}】", "USER");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (MessageBox.Show("是否允许D线生成任务?", "警告", MessageBoxButton.OKCancel) == MessageBoxResult.OK)
|
||||
{
|
||||
LineDIsEnable = true;
|
||||
lineDIsEnable = true;
|
||||
LineDStr = "允许下发";
|
||||
|
||||
SqlHelper.NewEventLog($"人工完成任务:{lineName}线切换为【{LineDStr}】", "USER");
|
||||
}
|
||||
}
|
||||
break;
|
||||
case "AB":
|
||||
if (LineABIsEnable)
|
||||
{
|
||||
if (MessageBox.Show("是否禁止AB线生成任务?", "警告", MessageBoxButton.OKCancel) == MessageBoxResult.OK)
|
||||
{
|
||||
LineABIsEnable = false;
|
||||
lineABIsEnable = false;
|
||||
LineABStr = "禁止下发";
|
||||
|
||||
SqlHelper.NewEventLog($"人工完成任务:{lineName}线切换为【{LineABStr}】", "USER");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (MessageBox.Show("是否允许AB线生成任务?", "警告", MessageBoxButton.OKCancel) == MessageBoxResult.OK)
|
||||
{
|
||||
LineABIsEnable = true;
|
||||
lineABIsEnable = true;
|
||||
LineABStr = "允许下发";
|
||||
|
||||
SqlHelper.NewEventLog($"人工完成任务:{lineName}线切换为【{LineABStr}】", "USER");
|
||||
}
|
||||
}
|
||||
break;
|
||||
case "CD":
|
||||
if (LineCDIsEnable)
|
||||
{
|
||||
if (MessageBox.Show("是否禁止CD线生成任务?", "警告", MessageBoxButton.OKCancel) == MessageBoxResult.OK)
|
||||
{
|
||||
LineCDIsEnable = false;
|
||||
lineCDIsEnable = false;
|
||||
LineCDStr = "禁止下发";
|
||||
|
||||
SqlHelper.NewEventLog($"人工完成任务:{lineName}线切换为【{LineCDStr}】", "USER");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (MessageBox.Show("是否允许CD线生成任务?", "警告", MessageBoxButton.OKCancel) == MessageBoxResult.OK)
|
||||
{
|
||||
LineCDIsEnable = true;
|
||||
lineCDIsEnable = true;
|
||||
LineCDStr = "允许下发";
|
||||
|
||||
SqlHelper.NewEventLog($"人工完成任务:{lineName}线切换为【{LineCDStr}】", "USER");
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
673
WPFWCSDemo/ViewModels/TaskHistoryViewModel.cs
Normal file
673
WPFWCSDemo/ViewModels/TaskHistoryViewModel.cs
Normal file
@@ -0,0 +1,673 @@
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
using CommunityToolkit.Mvvm.Input;
|
||||
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.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();
|
||||
|
||||
//DataTable? dtCount = SqlHelper.ExecuteTable("SELECT * FROM TASK_HISTORY ORDER BY CREATETIME DESC");
|
||||
DataTable? dtCount = SqlHelper.ExecuteTable("SELECT * FROM TASK_HISTORY_VIEW ORDER BY 结束时间 DESC");
|
||||
|
||||
//DataTable? dt = SqlHelper.ExecuteTable("SELECT * FROM TASK_HISTORY ORDER BY CREATETIME DESC OFFSET @Rows ROW FETCH NEXT 10 ROW ONLY",
|
||||
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 * 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 * 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 = 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} 页";
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
763
WPFWCSDemo/ViewModels/TaskViewModel.cs
Normal file
763
WPFWCSDemo/ViewModels/TaskViewModel.cs
Normal file
@@ -0,0 +1,763 @@
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
using CommunityToolkit.Mvvm.Input;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.Xaml.Behaviors.Layout;
|
||||
using Newtonsoft.Json;
|
||||
using Serilog;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Configuration;
|
||||
using System.Data;
|
||||
using System.Data.Common;
|
||||
using System.Data.SqlClient;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Text.Json.Serialization;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows;
|
||||
using System.Windows.Threading;
|
||||
using WPFWCSDemo.Common;
|
||||
using WPFWCSDemo.Data;
|
||||
using WPFWCSDemo.Models.Devices.CircleRGV;
|
||||
using WPFWCSDemo.Models.Devices.CircleRGVStation;
|
||||
using WPFWCSDemo.Models.Tables;
|
||||
using WPFWCSDemo.StateCode;
|
||||
using WPFWCSDemo.Utilities;
|
||||
using WPFWCSDemo.Utilities.Table;
|
||||
using WPFWCSDemo.Views.CustomComponent;
|
||||
using static System.Windows.Forms.VisualStyles.VisualStyleElement.TrackBar;
|
||||
|
||||
namespace WPFWCSDemo.ViewModels
|
||||
{
|
||||
public partial class TaskViewModel : ObservableObject
|
||||
{
|
||||
/// <summary>
|
||||
/// 用于实时更新任务表的定时器
|
||||
/// </summary>
|
||||
private DispatcherTimer dispatcherTimer;
|
||||
|
||||
public TaskViewModel()
|
||||
{
|
||||
TaskRT = new ObservableCollection<TaskRT>();
|
||||
|
||||
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(6); // 设置时间间隔
|
||||
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<TaskRT> _taskRT;
|
||||
|
||||
/// <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()
|
||||
{
|
||||
using var context = new AppDbContext();
|
||||
|
||||
List<TaskRT> tasks;
|
||||
|
||||
if (TaskTypeSelectedIndex == 1)
|
||||
{
|
||||
tasks = context.Set<TaskRT>()
|
||||
.OrderByDescending(t => t.CreateTime)
|
||||
.Where(t => t.TaskType == 10)
|
||||
.ToList();
|
||||
}
|
||||
else if (TaskTypeSelectedIndex == 2)
|
||||
{
|
||||
tasks = context.Set<TaskRT>()
|
||||
.OrderByDescending(t => t.CreateTime)
|
||||
.Where(t => t.TaskType == 11)
|
||||
.ToList();
|
||||
}
|
||||
else
|
||||
{
|
||||
tasks = context.Set<TaskRT>()
|
||||
.OrderByDescending(t => t.CreateTime)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
TaskRT.Clear();
|
||||
|
||||
//遍历表中每行数据并初始化值
|
||||
foreach (TaskRT task in tasks)
|
||||
{
|
||||
TaskRT.Add(task);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 查询任务
|
||||
/// </summary>
|
||||
[RelayCommand]
|
||||
public void Query()
|
||||
{
|
||||
//关键词不为空且列名不为空
|
||||
if (!string.IsNullOrEmpty(Keywords) && !string.IsNullOrEmpty(ColumnName))
|
||||
{
|
||||
using var context = new AppDbContext();
|
||||
|
||||
var tasks=context.Set<TaskRT>()
|
||||
.FromSqlInterpolated($"SELECT * FROM TASK WHERE {col[ColumnName]} LIKE %{Keywords}% ORDER BY CREATETIME DESC")
|
||||
.ToList();
|
||||
|
||||
TaskRT.Clear();
|
||||
|
||||
//遍历表中每行数据并初始化值
|
||||
foreach (TaskRT task in tasks)
|
||||
{
|
||||
TaskRT.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(),
|
||||
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("任务号", "TaskId");
|
||||
//col.Add("托盘号", "PalletId");
|
||||
col.Add("任务类型", "TaskType");
|
||||
col.Add("源站点", "SourceLocation");
|
||||
col.Add("目标站点", "TargetLocation");
|
||||
col.Add("任务状态", "TaskState");
|
||||
//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<TaskRT>()
|
||||
.OrderByDescending(t => t.CreateTime)
|
||||
.ToList();
|
||||
|
||||
TaskRT.Clear();
|
||||
|
||||
//遍历表中每行数据并初始化值
|
||||
foreach (TaskRT task in tasks)
|
||||
{
|
||||
TaskRT.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
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 下发测试任务
|
||||
/// </summary>
|
||||
[RelayCommand]
|
||||
void SendRGVTest()
|
||||
{
|
||||
if (MessageBox.Show("此操作会向环穿地面站PLC直接写入命令!是否继续?","",MessageBoxButton.YesNo) != MessageBoxResult.OK)
|
||||
{
|
||||
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($"【环穿下发任务测试】直接向地面站PLC下发任务:{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();
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user