using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Common.LocationEnum;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Common;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_QuartzJob;
namespace WIDESEAWCS_Tasks
{
public partial class TestJob
{
///
/// 四向车质检任务
///
///
public void SXCTasks(OtherDevice device)
{
#region 四向车任务
List Uptasks = new List();
var taskList = _taskService.Repository.QueryData(x => x.TaskType == TaskTypeEnum.CPInbound.ObjToInt() && x.TaskState == TaskStatusEnum.CheckShapeing.ObjToInt());
//任务的目标地址对于站台号;
foreach (var task in taskList)
{
if (device.GetValue(QualityInspectionCommandEnum.R_QualityInspection, task.SourceAddress))
{
device.SetValue(QualityInspectionCommandEnum.StartqualityInspection, false, task.SourceAddress);
//再读取质检结果
var qualityResult = device.GetValue(QualityInspectionCommandEnum.R_QualityInspectionInProgress, task.SourceAddress);
//左超宽警告
var R_LeftOverWidthWarning = device.GetValue(QualityInspectionCommandEnum.R_LeftOverWidthWarning, task.SourceAddress);
//右超宽警告
var R_RightWideWarning = device.GetValue(QualityInspectionCommandEnum.R_RightWideWarning, task.SourceAddress);
//超高警告
var R_ExtremeWarning = device.GetValue(QualityInspectionCommandEnum.R_ExtremeWarning, task.SourceAddress);
if (qualityResult)
{
//如果质检通过了,就把任务状态改为质检完成
task.TaskState = TaskStatusEnum.CheckShapeingOk.ObjToInt();
task.ExceptionMessage = "";
Uptasks.Add(task);
}
else
{
task.TaskState = TaskStatusEnum.CheckShapeingNG.ObjToInt();
task.ExceptionMessage = "外检失败";
if (R_LeftOverWidthWarning) task.ExceptionMessage += ",左超宽";
if (R_RightWideWarning) task.ExceptionMessage += ",右超宽";
if (R_ExtremeWarning) task.ExceptionMessage += ",超高";
Uptasks.Add(task);
//写入复位信号
//device.SetValue(QualityInspectionCommandEnum.FaultReset, true, task.SourceAddress);
}
//写入停止质检信号
device.SetValue(QualityInspectionCommandEnum.StopqualityInspection, true, task.SourceAddress);
Thread.Sleep(500);
device.SetValue(QualityInspectionCommandEnum.StopqualityInspection, false, task.SourceAddress);
}
//else
//{
// //写入停止质检信号
// device.SetValue(QualityInspectionCommandEnum.StopqualityInspection, false, task.SourceAddress);
// device.SetValue(QualityInspectionCommandEnum.StartqualityInspection, true, task.SourceAddress);
//}
else
{
task.TaskState = TaskStatusEnum.CheckShapeingNG.ObjToInt();
task.ExceptionMessage = "未检测到质检完成信号";
Uptasks.Add(task);
}
}
if (Uptasks.Count > 0)
{
_taskService.UpdateData(Uptasks);
}
#endregion
}
///
/// 海康AGV1-6楼任务
///
///
public void KHTasks(OtherDevice device)
{
List Uptasks = new List();
var AGVtaskList = _taskService.Repository.QueryData(x => x.TaskState == TaskStatusEnum.AGV_WaitToExecute.ObjToInt() && (x.TaskType == TaskTypeEnum.Q3RK.ObjToInt() || x.TaskType == TaskTypeEnum.Q3CK.ObjToInt()));//1-6和6-1楼任务
foreach (var item in AGVtaskList)
{
var address = item.TaskType == TaskTypeEnum.Q3RK.ObjToInt() ? item.TargetAddress : item.SourceAddress;
var stationManger = _stationMangerService.Repository.QueryFirst(x => x.StationCode == address);
if (stationManger == null)
{
item.ExceptionMessage = $"未找到【{address}】站台信息";
Uptasks.Add(item);
continue;
}
var StockAvailableSymbol = device.GetValue(QualityInspectionCommandEnum.R_StockAvailableSymbol, address);
if (item.TaskType == TaskTypeEnum.Q3RK.ObjToInt())
{
if (StockAvailableSymbol)
{
item.ExceptionMessage = $"{address}站台光电检测有货!";
Uptasks.Add(item);
continue;
}
if (stationManger.IsOccupied == (int)LocationStatusEnum.Lock)
{
item.ExceptionMessage = $"站台有货!";
Uptasks.Add(item);
continue;
}
}
else
{
if (!StockAvailableSymbol)
{
item.ExceptionMessage = $"{address}站台光电检测无货!";
Uptasks.Add(item);
continue;
}
if (stationManger.IsOccupied == (int)LocationStatusEnum.Free)
{
item.ExceptionMessage = $"站台无货!";
Uptasks.Add(item);
continue;
}
}
//into进入一楼位置的时候,写入进入信号
device.SetValue(QualityInspectionCommandEnum.RequestToEnter, true, address);
if (!device.GetValue(QualityInspectionCommandEnum.Blocking, address))
{
item.ExceptionMessage = $"{address}站台光栅不为true(1)!";
Uptasks.Add(item);
continue;
}
var result = _taskService.Hikvisiontaskscontinue(item.WMSTaskNum);
if (result.Status == false)
{
if (item.ExceptionMessage != result.Message)
{
item.ExceptionMessage = result.Message;
Uptasks.Add(item);
}
continue;
}
item.TaskState = (int)TaskStatusEnum.AGV_ToExecute;
item.ExceptionMessage = "";
Uptasks.Add(item);
}
if (Uptasks.Count > 0)
{
_taskService.UpdateData(Uptasks);
}
}
}
}