Files
FT479/WPFWCSDemo/Schedules/TaskFinish/Delete.cs
2026-06-29 14:46:32 +08:00

133 lines
5.5 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using Serilog;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WPFWCSDemo.Common;
using WPFWCSDemo.Data;
using WPFWCSDemo.Models.Devices.CircleRGVStation;
using WPFWCSDemo.StateCode;
using WPFWCSDemo.Utilities.Table;
using WPFWCSDemo.ViewModels;
namespace WPFWCSDemo.Schedules.TaskFinish
{
/// <summary>
/// 任务移除
/// </summary>
public class Delete
{
/// <summary>
/// 完成的调度任务从实时表删除记入历史记录
/// </summary>
/// <param name="taskRT">当前已完成的任务</param>
public static void TaskDelete()
{
using var context = new AppDbContext();
//查找符合【任务状态】和【调度状态】的记录
var taskRT = context.Tasks
.Where(t => t.TaskState == TaskStateCode.Task_Finish ||
t.TaskState == TaskStateCode.Task_Finish_Manual ||
t.TaskState == TaskStateCode.Task_Finish_Cancel ||
t.TaskState == TaskStateCode.Task_Cancel ||
t.TaskState == TaskStateCode.Task_Finish_Timeout)
.OrderBy(t => t.CreateTime)
.ToList();
if (taskRT is null || taskRT.Count == 0) return;
for (int i = 0; i < taskRT.Count; i++)
{
//任务完成状态文本
string strTaskState;
switch (taskRT[i].TaskState)
{
case TaskStateCode.Task_Finish:
strTaskState = "任务自动完成";
break;
case TaskStateCode.Task_Finish_Manual:
strTaskState = "任务手动完成";
break;
case TaskStateCode.Task_Finish_Cancel:
strTaskState = "任务手动取消";
break;
case TaskStateCode.Task_Cancel:
strTaskState = "任务自动作废";
break;
case TaskStateCode.Task_Finish_Timeout:
strTaskState = "任务超时自动完成";
break;
default:
strTaskState = "发生未知异常,请检查后手动处理";//其他状态:异常-手动处理
break;
}
Log.Information($"【WCS任务结束】【{strTaskState}】,任务号:{taskRT[i].TaskId}");
//---------------------------------------------反馈任务结束成功后:删除表任务添加至历史记录---------------------------------------------
int result = TaskManager.Delete(taskRT[i]);
if (result == 1)
{
if (taskRT[i].TaskType == TaskType.Goods)
Log.Information($"【常规任务-实垛】【{strTaskState}】,任务号:{taskRT[i].TaskId},历史任务记录已保存");
if (taskRT[i].TaskType == TaskType.Pallet)
Log.Information($"【常规任务-空托】【{strTaskState}】,任务号:{taskRT[i].TaskId},历史任务记录已保存");
if (taskRT[i].TaskType == TaskType.GoToRest)
Log.Information($"【进休息区】【{strTaskState}】,作业号:{taskRT[i].JobId} 任务号:{taskRT[i].TaskId},历史任务记录已保存");
if (taskRT[i].TaskType == TaskType.BackToRail)
Log.Information($"【返回轨道】【{strTaskState}】,作业号:{taskRT[i].JobId} 任务号:{taskRT[i].TaskId},历史任务记录已保存");
}
}
//LineFlagAutoReset();
}
///// <summary>
///// 防错机制【可下发任务标志】---如果当前某条线无输送任务,则重置该输送线请求标志为true
///// </summary>
//public static void LineFlagAutoReset()
//{
// using var context = new AppDbContext();
// int lineA = context.Tasks.Where(t => t.SourceLocation == RGVStation.LineA_In.ToString()).Count();
// if (lineA == 0) LineAIsAvailable = true;
// int lineB = context.Tasks.Where(t => t.SourceLocation == RGVStation.LineB_In.ToString()).Count();
// if (lineB == 0) LineBIsAvailable = true;
// int lineC = context.Tasks.Where(t => t.SourceLocation == RGVStation.LineC_In.ToString()).Count();
// if (lineC == 0) LineCIsAvailable = true;
// int lineD = context.Tasks.Where(t => t.SourceLocation == RGVStation.LineD_In.ToString()).Count();
// if (lineD == 0) LineDIsAvailable = true;
// using CircleRGVStationState? circleRGVStationState = CircleRGVsViewModel.GetCircleRGVStaionState();
// //地面站【允许下发】
// if (circleRGVStationState is null || circleRGVStationState.Read_Permission == 0) return;
// int lineAB = context.Tasks.Where(t => t.SourceLocation == RGVStation.LineAB_In.ToString()).Count();
// if (lineAB == 0 && circleRGVStationState.Read_PutRequest_LineB) LineABIsAvailable = true;
// int lineCD = context.Tasks.Where(t => t.SourceLocation == RGVStation.LineCD_In.ToString()).Count();
// if (lineCD == 0 && circleRGVStationState.Read_PutRequest_LineC) LineCDIsAvailable = true;
//}
}
}