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 { /// /// 任务移除 /// public class Delete { /// /// 完成的调度任务从实时表删除记入历史记录 /// /// 当前已完成的任务 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(); } ///// ///// 防错机制【可下发任务标志】---如果当前某条线无输送任务,则重置该输送线请求标志为true ///// //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; //} } }