133 lines
5.5 KiB
C#
133 lines
5.5 KiB
C#
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;
|
||
|
||
//}
|
||
|
||
|
||
}
|
||
}
|