using Autofac.Core;
|
using HslCommunication;
|
using HslCommunication.Core;
|
using Microsoft.VisualBasic.FileIO;
|
using Quartz;
|
using SixLabors.ImageSharp.PixelFormats;
|
using System;
|
using System.Collections.Generic;
|
using System.ComponentModel;
|
using System.Linq;
|
using System.Reflection;
|
using System.Text;
|
using System.Threading.Tasks;
|
using WIDESEAWCS_Common;
|
using WIDESEAWCS_Common.TaskEnum;
|
using WIDESEAWCS_Communicator;
|
using WIDESEAWCS_Core.Helper;
|
using WIDESEAWCS_IBasicInfoService;
|
using WIDESEAWCS_ITaskInfoService;
|
using WIDESEAWCS_Model.Models;
|
using WIDESEAWCS_QuartzJob;
|
using WIDESEAWCS_QuartzJob.DeviceBase;
|
using WIDESEAWCS_QuartzJob.DTO;
|
using WIDESEAWCS_QuartzJob.StackerCrane.Enum;
|
using WIDESEAWCS_TaskInfoService;
|
|
namespace WIDESEAWCS_Tasks
|
{
|
[DisallowConcurrentExecution]
|
public class TestJob : JobBase, IJob
|
{
|
private readonly ITaskService _taskService;
|
private readonly IStationMangerService _stationMangerService;
|
public TestJob(ITaskService taskService, IStationMangerService stationMangerService)
|
{
|
_taskService = taskService;//注入
|
_stationMangerService = stationMangerService;
|
}
|
|
public Task Execute(IJobExecutionContext context)
|
{
|
|
bool flag = context.JobDetail.JobDataMap.TryGetValue("JobParams", out object? value);
|
if (flag && value != null)
|
{
|
OtherDevice device = (OtherDevice)value;
|
//Example
|
//device.GetValue 读取
|
//device.SetValue 写入
|
// _taskService.Repository 仓储层,进行数据库访问-
|
try
|
{
|
List<Dt_Task> Uptasks = new List<Dt_Task>();
|
var taskList = _taskService.Repository.QueryData(x => x.TaskType == TaskTypeEnum.CPInbound.ObjToInt() && x.TaskState == TaskStatusEnum.CheckShapeing.ObjToInt());
|
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 task in taskList)
|
{
|
if (device.GetValue<QualityInspectionCommandEnum, bool>(QualityInspectionCommandEnum.R_QualityInspection, task.SourceAddress))
|
{
|
device.SetValue(QualityInspectionCommandEnum.StartqualityInspection, false, task.SourceAddress);
|
//再读取质检结果
|
var qualityResult = device.GetValue<QualityInspectionCommandEnum, bool>(QualityInspectionCommandEnum.R_QualityInspectionInProgress, task.SourceAddress);
|
//左超宽警告
|
var R_LeftOverWidthWarning = device.GetValue<QualityInspectionCommandEnum, bool>(QualityInspectionCommandEnum.R_LeftOverWidthWarning, task.SourceAddress);
|
//右超宽警告
|
var R_RightWideWarning = device.GetValue<QualityInspectionCommandEnum, bool>(QualityInspectionCommandEnum.R_RightWideWarning, task.SourceAddress);
|
//超高警告
|
var R_ExtremeWarning = device.GetValue<QualityInspectionCommandEnum, bool>(QualityInspectionCommandEnum.R_ExtremeWarning, task.SourceAddress);
|
//写入停止质检信号
|
device.SetValue(QualityInspectionCommandEnum.StopqualityInspection, true, task.SourceAddress);
|
Thread.Sleep(500);
|
device.SetValue(QualityInspectionCommandEnum.StopqualityInspection, false, 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);
|
}
|
}
|
//else
|
//{
|
// //写入停止质检信号
|
// device.SetValue(QualityInspectionCommandEnum.StopqualityInspection, false, task.SourceAddress);
|
// device.SetValue(QualityInspectionCommandEnum.StartqualityInspection, true, task.SourceAddress);
|
//}
|
}
|
foreach (var item in AGVtaskList)
|
{
|
|
//into进入一楼位置的时候,写入进入信号
|
device.SetValue(QualityInspectionCommandEnum.RequestToEnter, true, item.TargetAddress);
|
if (!device.GetValue<QualityInspectionCommandEnum,bool>(QualityInspectionCommandEnum.Blocking)==true)
|
{
|
item.ExceptionMessage = $"{item.TargetAddress}站台光栅不为true(1)!";
|
}
|
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);
|
|
|
}
|
|
|
_taskService.UpdateData(Uptasks);
|
WriteInfo(device.DeviceName, "infoLog");
|
|
WriteDebug(device.DeviceName, "debugLog");
|
}
|
catch (Exception ex)
|
{
|
WriteError(device.DeviceName, "错误", ex);
|
}
|
}
|
else
|
{
|
WriteError(nameof(TestJob), "参数错误,未传递设备参数或设备类型错误");
|
}
|
|
|
return Task.CompletedTask;
|
}
|
}
|
|
|
}
|