添加项目文件。

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

View File

@@ -0,0 +1,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);
}
}
}