添加项目文件。
This commit is contained in:
195
WPFWCSDemo/Schedules/TaskFinishSchedule.cs
Normal file
195
WPFWCSDemo/Schedules/TaskFinishSchedule.cs
Normal file
@@ -0,0 +1,195 @@
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using Serilog;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Configuration;
|
||||
using System.Data;
|
||||
using System.Data.SqlClient;
|
||||
using System.Linq;
|
||||
using WPFWCSDemo.Common;
|
||||
using WPFWCSDemo.Data;
|
||||
using WPFWCSDemo.Models.Devices.CircleRGV;
|
||||
using WPFWCSDemo.Models.Devices.CircleRGVStation;
|
||||
using WPFWCSDemo.Models.Tables;
|
||||
using WPFWCSDemo.StateCode;
|
||||
using WPFWCSDemo.Utilities;
|
||||
using WPFWCSDemo.Utilities.Table;
|
||||
using WPFWCSDemo.ViewModels;
|
||||
|
||||
namespace WPFWCSDemo.Schedules
|
||||
{
|
||||
[Obsolete("该类下的方法已经移至其他类中使用",true)]
|
||||
public class TaskFinishSchedule
|
||||
{
|
||||
/// <summary>
|
||||
/// A线单次请求标志
|
||||
/// </summary>
|
||||
public static bool LineAIsAvailable = true;
|
||||
/// <summary>
|
||||
/// B线单次请求标志
|
||||
/// </summary>
|
||||
public static bool LineBIsAvailable = true;
|
||||
/// <summary>
|
||||
/// C线单次请求标志
|
||||
/// </summary>
|
||||
public static bool LineCIsAvailable = true;
|
||||
/// <summary>
|
||||
/// D线单次请求标志
|
||||
/// </summary>
|
||||
public static bool LineDIsAvailable = true;
|
||||
/// <summary>
|
||||
/// AB线单次请求标志
|
||||
/// </summary>
|
||||
public static bool LineABIsAvailable = true;
|
||||
/// <summary>
|
||||
/// CD线单次请求标志
|
||||
/// </summary>
|
||||
public static bool LineCDIsAvailable = true;
|
||||
|
||||
/// <summary>
|
||||
/// 自动完成处于一定时间内【放货中】状态的环穿【实垛】遗留任务
|
||||
/// </summary>
|
||||
public static void DeleteTaskForPuttingTimeout()
|
||||
{
|
||||
//查询【放货中】的任务
|
||||
using DataTable? dt = SqlHelper.ExecuteTable("SELECT TOP 1 * FROM TASK WHERE SCHEDULESTATE=@ScheduleState",
|
||||
new SqlParameter("@ScheduleState", ScheduleStateCode.Trans_CircleRGV_Putting)
|
||||
);
|
||||
if (dt is null || dt.Rows.Count == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
for (int i = 0; i < dt.Rows.Count; i++)
|
||||
{
|
||||
//获取第i条记录
|
||||
using TaskRT taskRT = TaskManager.ToModels(dt.Rows[i]);
|
||||
|
||||
TimeSpan diff = DateTime.Now - taskRT.ScheduleTime;
|
||||
|
||||
//处于【放货中】的实垛任务---如果旧任务放货时未正常自动完成,则出现新的同设备任务后,旧任务2分钟后自动完成
|
||||
if (taskRT.TaskType == 10)
|
||||
{
|
||||
//if (diff.TotalMinutes >= 2)
|
||||
//{
|
||||
//查询是否有编号重复的任务
|
||||
int count = SqlHelper.GetRowCount("SELECT * FROM TASK WHERE JOBID=@JobId",
|
||||
new SqlParameter("@JobId", taskRT.JobId)
|
||||
);
|
||||
|
||||
//如果存在编号重复的任务,表示小车已经分配了新任务---将【放货中】的任务设置为超时完成
|
||||
if (count > 1)
|
||||
{
|
||||
//表示小车已接到新任务
|
||||
SqlHelper.ExecuteNonQuery("UPDATE TASK SET TASKSTATE=@TaskState WHERE TASKID=@TaskId",
|
||||
new SqlParameter("@TaskState", TaskStateCode.Task_Finish_Timeout),
|
||||
new SqlParameter("@TaskId", taskRT.TaskId)
|
||||
);
|
||||
|
||||
Log.Warning($"【WCS更新<放货中>状态】任务号:{taskRT.TaskId}已作为遗留任务处理");
|
||||
}
|
||||
|
||||
|
||||
//}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 自动完成处于一定时间内【放货完成】状态的环穿遗留任务
|
||||
/// 该原因可能是由于某些因素使程序意外关闭导致的
|
||||
/// </summary>
|
||||
public static void DeleteTaskForFinishTimeout()
|
||||
{
|
||||
//查询【放货完成】的任务
|
||||
using DataTable? dt = SqlHelper.ExecuteTable("SELECT TOP 1 * FROM TASK WHERE SCHEDULESTATE=@ScheduleState AND CREATETIME<@CurrentTime",
|
||||
new SqlParameter("@ScheduleState", ScheduleStateCode.Trans_CircleRGV_Finish),
|
||||
new SqlParameter("@CurrentTime", DateTime.Now.AddMinutes(-8).ToString(TimeFormat.stringFormat))
|
||||
);
|
||||
if (dt is null || dt.Rows.Count == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
//获取第i条记录
|
||||
using TaskRT taskRT = TaskManager.ToModels(dt.Rows[0]);
|
||||
|
||||
if (taskRT is null) return;
|
||||
|
||||
//表示小车已接到新任务
|
||||
SqlHelper.ExecuteNonQuery("UPDATE TASK SET TASKSTATE=@TaskState WHERE TASKID=@TaskId",
|
||||
new SqlParameter("@TaskState", TaskStateCode.Task_Finish_Timeout),
|
||||
new SqlParameter("@TaskId", taskRT.TaskId)
|
||||
);
|
||||
|
||||
Log.Warning($"【WCS更新<放货完成>状态】任务号:{taskRT.TaskId}已作为遗留任务处理");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 防错机制(处理长时间可能未正常完成遗留任务记录)---获取下发时间距离当前时间较长的任务
|
||||
/// 将其任务号与执行中的小车匹配
|
||||
/// 判断该任务是否已经执行完成---完成则视为遗留任务处理
|
||||
/// </summary>
|
||||
public static void DeleteTaskForDeviceTaskNumberIsNotExist()
|
||||
{
|
||||
//查找【放货途中】和【放货中】的任务
|
||||
using DataTable? dt = SqlHelper.ExecuteTable("SELECT * FROM TASK WHERE (SCHEDULESTATE=@ScheduleState OR SCHEDULESTATE=@ScheduleState1) AND SCHEDULETIME<@CurrentTime",
|
||||
new SqlParameter("@ScheduleState", ScheduleStateCode.Trans_CircleRGV_PutOnTheWay),
|
||||
new SqlParameter("@ScheduleState1", ScheduleStateCode.Trans_CircleRGV_Putting),
|
||||
new SqlParameter("@CurrentTime", DateTime.Now.AddMinutes(-30).ToString(TimeFormat.stringFormat))
|
||||
);
|
||||
|
||||
if (dt is null || dt.Rows.Count == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
for (int i = 0; i < dt.Rows.Count; i++)
|
||||
{
|
||||
using TaskRT? taskRT = TaskManager.ToModels(dt.Rows[i]);
|
||||
|
||||
//获取对应小车编号---此处需要保证小车编号正确性,在更新【放货】阶段的逻辑中再次更新了小车编号
|
||||
if (string.IsNullOrEmpty(taskRT.JobId)) continue;
|
||||
|
||||
//数据类型正确
|
||||
if (int.Parse(taskRT.JobId) > 0 && int.Parse(taskRT.JobId) < 10)
|
||||
{
|
||||
//获取任务表中编号对应的小车
|
||||
CircleRGVState? circleRGVState = CircleRGVsViewModel.GetCircleRGVState(int.Parse(taskRT.JobId));
|
||||
|
||||
if (circleRGVState == null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
//判断设备任务号是否与任务表中的任务号匹配
|
||||
//匹配---不执行操作
|
||||
//不匹配---视为遗留任务处理
|
||||
if (circleRGVState.Read_TaskNumber.ToString() != taskRT.TaskId)
|
||||
{
|
||||
//表示小车已接到新任务
|
||||
SqlHelper.ExecuteNonQuery("UPDATE TASK SET TASKSTATE=@TaskState WHERE TASKID=@TaskId",
|
||||
new SqlParameter("@TaskState", TaskStateCode.Task_Finish_Timeout),
|
||||
new SqlParameter("@TaskId", taskRT.TaskId)
|
||||
);
|
||||
|
||||
Log.Warning($"【WCS更新任务状态】任务号:{taskRT.TaskId}无法匹配与执行中设备任务号,已作为遗留任务超时处理");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user