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;
//}
}
}