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#
472 lines
18 KiB
C#
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
|
|
|
|
|
|
}
|
|
}
|