You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

472 lines
18 KiB
C#

4 days ago
using System;
using System.Collections.Generic;
using System.Drawing.Imaging;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Automation.Text;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Microsoft.Extensions.DependencyInjection;
using Sln.Wcs.Model.Domain;
using Sln_Wpf.Page.AddWindows;
using SqlSugar;
namespace Sln_Wpf.Page
{
/// <summary>
/// TaskInfo.xaml 的交互逻辑
/// </summary>
public partial class TaskInfo : UserControl
{
private List<BaseTasktypeInfo> _taskTypes;
private List<BaseSubtaskTemplate> _subtasks;
private List<WcsTaskInstance> _wcsTask;
private BaseTasktypeInfo _selectedTaskType;
private BaseSubtaskTemplate _selectedSubtask;
private WcsTaskInstance _selectedTaskInstance;
private ISqlSugarClient? sqlSugarClient;
public TaskInfo()
{
InitializeComponent();
sqlSugarClient = App.ServiceProvider.GetService<ISqlSugarClient>();
sqlSugarClient.AsTenant().ChangeDatabase("wcs");
_wcsTask = sqlSugarClient.Queryable<WcsTaskInstance>().ToList();
_taskTypes = sqlSugarClient.Queryable<BaseTasktypeInfo>().ToList();
_subtasks = sqlSugarClient.Queryable<BaseSubtaskTemplate>().ToList();
BindTaskTypeData();
BindSubtaskData();
BindTaskInstanceData();
LoadFilters();
}
private void BindTaskInstanceData()
{
var displayData = _wcsTask.Select(t => new
{
t.TaskCode,
t.TaskName,
t.TaskTypeName,
Status = GetStatusText(t.Status),
PriorityText = GetPriorityText(t.Priority),
t.SourceLocation,
t.TargetLocation,
t.MaterialCode,
t.MaterialName,
t.SubtaskCount,
t.CurrentSubtaskCode,
t.ResultCode,
t.ErrorMessage,
CreateTime = t.CreateTime.ToString("yyyy-MM-dd HH:mm:ss"),
UpdateTime = t.UpdateTime.ToString("yyyy-MM-dd HH:mm:ss")
}).ToList();
TaskDataGrid.ItemsSource = displayData;
}
public static string GetPriorityText(int? priority)
{
switch (priority)
{
case 0:
return "普通";
case 1:
return "较高";
case 2:
return "高";
case 3:
return "最高";
default:
return "普通";
}
}
private string GetStatusText(string status)
{
switch (status)
{
case "RUNNING": return "执行中";
case "ERROR": return "异常";
default: return status ?? "未知";
}
}
private void BindTaskTypeData()
{
var displayData = _taskTypes.Select(t => new
{
t.TaskTypeName,
t.TaskTypeKey,
t.TaskTypeValue,
t.UseFlag,
t.AgvType,
t.AgvTaskType
}).ToList();
TaskTypeDataGrid.ItemsSource = displayData;
}
private void BindSubtaskData()
{
var displayData = _subtasks.Select(s => new
{
s.SubtaskCode,
s.SubtaskName,
s.SubtaskType,
s.DeviceType,
s.DeviceAction,
s.SourceLocationType,
s.SourceLocationCode,
s.TargetLocationType,
s.TargetLocationCode,
s.MaterialAction,
s.ContainerType,
s.IsCarryMaterial,
s.Status
}).ToList();
SubtaskDataGrid.ItemsSource = displayData;
}
private void LoadFilters()
{
// 加载任务类型筛选
var parentTypes = _subtasks.Select(s => s.SubtaskType).Distinct().ToList();
FilterParentTaskType.Items.Clear();
FilterParentTaskType.Items.Add("全部任务类型");
foreach (var type in parentTypes)
{
FilterParentTaskType.Items.Add(type);
}
}
private void TabControl_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
//UpdateStats();
}
#region 任务类型事件
private void BtnTaskAdd_Click(object sender, RoutedEventArgs e)
{
var addWindow = new AddTaskWindow();
addWindow.Owner = Window.GetWindow(this);
if (addWindow.ShowDialog() == true)
{
_wcsTask.Add(addWindow.NewTask);
BindTaskInstanceData();
MessageBox.Show($"任务类型 {addWindow.NewTask.TaskTypeName} 添加成功!", "添加成功", MessageBoxButton.OK, MessageBoxImage.Information);
}
}
private void BtnTaskDelete_Click(object sender, RoutedEventArgs e)
{
if (_selectedTaskInstance == null)
{
MessageBox.Show("请先选择要删除的任务", "提示", MessageBoxButton.OK, MessageBoxImage.Warning);
return;
}
var result = MessageBox.Show($"确定要删除任务 {_selectedTaskInstance.TaskName} 吗?\n删除后关联的子任务也会被删除。", "确认删除", MessageBoxButton.YesNo, MessageBoxImage.Question);
if (result == MessageBoxResult.Yes)
{
// 删除关联的子任务
_wcsTask.Remove(_selectedTaskInstance);
var flag = sqlSugarClient.Deleteable<WcsTaskInstance>().Where(d => d.TaskCode == _selectedTaskInstance.TaskCode).ExecuteCommand();
var flag1 = sqlSugarClient.Deleteable<SubTaskInstance>().Where(d => d.MaintaskCode == _selectedTaskInstance.TaskCode).ExecuteCommand();
BindTaskInstanceData();
BindSubtaskData();
LoadFilters();
_selectedTaskInstance = null;
if (flag > 0 && flag1 > 0)
MessageBox.Show("删除成功", "提示", MessageBoxButton.OK, MessageBoxImage.Information);
}
}
private void ExceptionTaskEdit_Click(object sender, RoutedEventArgs e)
{
if (_selectedTaskInstance == null)
{
MessageBox.Show("请先选择要重置的任务", "提示", MessageBoxButton.OK, MessageBoxImage.Warning);
return;
}
var result = MessageBox.Show($"确定要重置任务 {_selectedTaskInstance.TaskName} 吗?", "确认重置", MessageBoxButton.YesNo, MessageBoxImage.Question);
if (result == MessageBoxResult.Yes)
{
// 重置关联的子任务
var flag = sqlSugarClient.Updateable<SubTaskInstance>().Where(it => it.MaintaskCode == _selectedTaskInstance.TaskCode).SetColumns(it => new SubTaskInstance()
{
TaskStatus = 0,
}).ExecuteCommand();
sqlSugarClient.Updateable<WcsTaskInstance>().Where(it => it.TaskCode == _selectedTaskInstance.TaskCode).SetColumns(it => new WcsTaskInstance()
{
Status = "RUNNING",
}).ExecuteCommand();
BindTaskInstanceData();
BindSubtaskData();
LoadFilters();
_selectedTaskInstance = null;
if (flag > 0)
MessageBox.Show("重置成功", "提示", MessageBoxButton.OK, MessageBoxImage.Information);
}
}
private void TaskDataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
var selected = TaskDataGrid.SelectedItem;
if (selected != null)
{
var taskCode = selected.GetType().GetProperty("TaskCode")?.GetValue(selected)?.ToString();
_selectedTaskInstance = _wcsTask.FirstOrDefault(t => t.TaskCode == taskCode);
}
}
private void BtnTaskTypeAdd_Click(object sender, RoutedEventArgs e)
{
var addWindow = new AddTaskTypeWindow();
addWindow.Owner = Window.GetWindow(this);
if (addWindow.ShowDialog() == true)
{
_taskTypes.Add(addWindow.NewTaskType);
BindTaskTypeData();
MessageBox.Show($"任务类型 {addWindow.NewTaskType.TaskTypeName} 添加成功!", "添加成功", MessageBoxButton.OK, MessageBoxImage.Information);
}
}
private void BtnTaskTypeEdit_Click(object sender, RoutedEventArgs e)
{
if (_selectedTaskType == null)
{
MessageBox.Show("请先选择要编辑的任务类型", "提示", MessageBoxButton.OK, MessageBoxImage.Warning);
return;
}
var editWindow = new AddTaskTypeWindow(_selectedTaskType);
editWindow.Owner = Window.GetWindow(this);
if (editWindow.ShowDialog() == true)
{
var updated = editWindow.NewTaskType;
_selectedTaskType.TaskTypeName = updated.TaskTypeName;
_selectedTaskType.TaskTypeKey = updated.TaskTypeKey;
_selectedTaskType.TaskTypeValue = updated.TaskTypeValue;
_selectedTaskType.UseFlag = updated.UseFlag;
_selectedTaskType.AgvType = updated.AgvType;
_selectedTaskType.AgvTaskType = updated.AgvTaskType;
BindTaskTypeData();
MessageBox.Show("任务类型更新成功", "提示", MessageBoxButton.OK, MessageBoxImage.Information);
}
}
private void BtnTaskTypeDelete_Click(object sender, RoutedEventArgs e)
{
if (_selectedTaskType == null)
{
MessageBox.Show("请先选择要删除的任务类型", "提示", MessageBoxButton.OK, MessageBoxImage.Warning);
return;
}
var result = MessageBox.Show($"确定要删除任务类型 {_selectedTaskType.TaskTypeName} 吗?\n删除后关联的子任务也会被删除。", "确认删除", MessageBoxButton.YesNo, MessageBoxImage.Question);
if (result == MessageBoxResult.Yes)
{
// 删除关联的子任务
_taskTypes.Remove(_selectedTaskType);
var flag = sqlSugarClient.Deleteable<BaseTasktypeInfo>().Where(d => d.TaskTypeKey == _selectedTaskType.TaskTypeKey).ExecuteCommand();
BindTaskTypeData();
BindSubtaskData();
LoadFilters();
_selectedTaskType = null;
if (flag > 0)
MessageBox.Show("删除成功", "提示", MessageBoxButton.OK, MessageBoxImage.Information);
}
}
private void BtnTaskTypeQuery_Click(object sender, RoutedEventArgs e)
{
_taskTypes = sqlSugarClient.Queryable<BaseTasktypeInfo>().ToList();
string keyword = SearchTaskTypeKeyword.Text;
string filterFlag = FilterUseFlag.SelectedItem?.ToString();
var queryData = _taskTypes.AsEnumerable();
if (!string.IsNullOrEmpty(filterFlag) && filterFlag != "全部状态")
{
//queryData = queryData.Where(t => t.UseFlag == filterFlag);
}
if (!string.IsNullOrEmpty(keyword) && keyword != "请输入任务名称/编号")
{
queryData = queryData.Where(t => t.TaskTypeName.Contains(keyword) || t.TaskTypeKey.Contains(keyword));
}
var displayData = queryData.Select(t => new
{
t.TaskTypeName,
t.TaskTypeKey,
t.TaskTypeValue,
t.UseFlag,
t.AgvType,
t.AgvTaskType
}).ToList();
TaskTypeDataGrid.ItemsSource = displayData;
MessageBox.Show($"查询完成,共找到 {displayData.Count} 条记录", "查询结果", MessageBoxButton.OK, MessageBoxImage.Information);
}
private void TaskTypeDataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
var selected = TaskTypeDataGrid.SelectedItem;
if (selected != null)
{
var taskTypeKey = selected.GetType().GetProperty("TaskTypeKey")?.GetValue(selected)?.ToString();
_selectedTaskType = _taskTypes.FirstOrDefault(t => t.TaskTypeKey == taskTypeKey);
}
}
#endregion
#region 子任务事件
private void BtnSubtaskAdd_Click(object sender, RoutedEventArgs e)
{
var addWindow = new AddSubtaskWindow();
addWindow.Owner = Window.GetWindow(this);
if (addWindow.ShowDialog() == true)
{
_subtasks.Add(addWindow.NewSubtask);
BindSubtaskData();
LoadFilters();
MessageBox.Show($"子任务 {addWindow.NewSubtask.SubtaskCode} 添加成功!", "添加成功", MessageBoxButton.OK, MessageBoxImage.Information);
}
}
private void BtnSubtaskEdit_Click(object sender, RoutedEventArgs e)
{
if (_selectedSubtask == null)
{
MessageBox.Show("请先选择要编辑的子任务", "提示", MessageBoxButton.OK, MessageBoxImage.Warning);
return;
}
var editWindow = new AddSubtaskWindow(_selectedSubtask);
editWindow.Owner = Window.GetWindow(this);
if (editWindow.ShowDialog() == true)
{
var updated = editWindow.NewSubtask;
_selectedSubtask.SubtaskCode = updated.SubtaskCode;
_selectedSubtask.SubtaskName = updated.SubtaskName;
_selectedSubtask.SubtaskType = updated.SubtaskType;
_selectedSubtask.DeviceType = updated.DeviceType;
_selectedSubtask.DeviceAction = updated.DeviceAction;
_selectedSubtask.SourceLocationType = updated.SourceLocationType;
_selectedSubtask.SourceLocationCode = updated.SourceLocationCode;
_selectedSubtask.TargetLocationType = updated.TargetLocationType;
_selectedSubtask.TargetLocationCode = updated.TargetLocationCode;
_selectedSubtask.MaterialAction = updated.MaterialAction;
_selectedSubtask.ContainerType = updated.ContainerType;
_selectedSubtask.IsCarryMaterial = updated.IsCarryMaterial;
_selectedSubtask.Status = updated.Status;
BindSubtaskData();
MessageBox.Show("子任务更新成功", "提示", MessageBoxButton.OK, MessageBoxImage.Information);
}
}
private void BtnSubtaskDelete_Click(object sender, RoutedEventArgs e)
{
if (_selectedSubtask == null)
{
MessageBox.Show("请先选择要删除的子任务", "提示", MessageBoxButton.OK, MessageBoxImage.Warning);
return;
}
var result = MessageBox.Show($"确定要删除子任务 {_selectedSubtask.SubtaskCode} {_selectedSubtask.SubtaskName} 吗?", "确认删除", MessageBoxButton.YesNo, MessageBoxImage.Question);
if (result == MessageBoxResult.Yes)
{
var flag = sqlSugarClient.Deleteable<BaseSubtaskTemplate>().Where(d => d.SubtaskCode == _selectedSubtask.SubtaskCode).ExecuteCommand();
if (flag > 0)
{
_subtasks.Remove(_selectedSubtask);
BindSubtaskData();
LoadFilters();
_selectedSubtask = null;
MessageBox.Show("删除成功", "提示", MessageBoxButton.OK, MessageBoxImage.Information);
}
}
}
private void BtnSubtaskQuery_Click(object sender, RoutedEventArgs e)
{
string keyword = SearchSubtaskKeyword.Text;
string filterParent = FilterParentTaskType.SelectedItem?.ToString();
string filterStatus = FilterSubtaskStatus.SelectedItem?.ToString();
var queryData = _subtasks.AsEnumerable();
if (!string.IsNullOrEmpty(filterParent) && filterParent != "全部任务类型")
{
queryData = queryData.Where(s => s.SubtaskType == filterParent);
}
if (!string.IsNullOrEmpty(filterStatus) && filterStatus != "全部状态")
{
//queryData = queryData.Where(s => s.Status == filterStatus);
}
if (!string.IsNullOrEmpty(keyword) && keyword != "请输入子任务编码/名称")
{
queryData = queryData.Where(s => s.SubtaskCode.Contains(keyword) || s.SubtaskName.Contains(keyword));
}
var displayData = queryData.Select(s => new
{
s.SubtaskCode,
s.SubtaskName,
s.SubtaskType,
s.DeviceType,
s.DeviceAction,
s.SourceLocationType,
s.SourceLocationCode,
s.TargetLocationType,
s.TargetLocationCode,
s.MaterialAction,
s.ContainerType,
s.IsCarryMaterial,
s.Status
}).ToList();
SubtaskDataGrid.ItemsSource = displayData;
MessageBox.Show($"查询完成,共找到 {displayData.Count} 条记录", "查询结果", MessageBoxButton.OK, MessageBoxImage.Information);
}
private void SubtaskDataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
var selected = SubtaskDataGrid.SelectedItem;
if (selected != null)
{
var subtaskCode = selected.GetType().GetProperty("SubtaskCode")?.GetValue(selected)?.ToString();
_selectedSubtask = _subtasks.FirstOrDefault(s => s.SubtaskCode == subtaskCode);
}
}
#endregion
}
}