using Autofac.Core;
|
using HslCommunication;
|
using HslCommunication.Core;
|
using HslCommunication.WebSocket;
|
using Microsoft.Extensions.Hosting;
|
using Microsoft.VisualBasic.FileIO;
|
using Newtonsoft.Json;
|
using Quartz;
|
using SixLabors.ImageSharp.PixelFormats;
|
using System;
|
using System.Collections.Generic;
|
using System.ComponentModel;
|
using System.Diagnostics.CodeAnalysis;
|
using System.Linq;
|
using System.Reflection;
|
using System.Text;
|
using System.Threading.Tasks;
|
using WIDESEAWCS_Common.TaskEnum;
|
using WIDESEAWCS_Communicator;
|
using WIDESEAWCS_Core.BaseRepository;
|
using WIDESEAWCS_Core.Helper;
|
using WIDESEAWCS_ISystemServices;
|
using WIDESEAWCS_ITaskInfoService;
|
using WIDESEAWCS_Model.Models;
|
using WIDESEAWCS_QuartzJob;
|
using WIDESEAWCS_QuartzJob.DeviceBase;
|
using WIDESEAWCS_QuartzJob.StackerCrane.Enum;
|
using WIDESEAWCS_Tasks.OHT;
|
|
namespace WIDESEAWCS_Tasks
|
{
|
[DisallowConcurrentExecution]
|
public class GZJJob : JobBase, IJob
|
{
|
private readonly ITaskService _taskService;
|
private readonly Idt_ErrormsginfoService _ErrormsginfoService;
|
private readonly IRepository<dt_stationInfo> _dt_stationInfoRepository;
|
private readonly IRepository<Dt_Task> _dt_taskRepositiry;
|
|
WebSocketServer _webSocketServer;
|
public GZJJob(ITaskService taskService, WebSocketServer webSocketServer, Idt_ErrormsginfoService errormsginfoService,
|
Idt_StationinfoService stationinfoService,
|
IRepository<dt_stationInfo> dt_stationInfoRepository,
|
IRepository<Dt_Task> dt_taskRepositiry)
|
{
|
_taskService = taskService;//注入
|
_webSocketServer = webSocketServer;
|
_ErrormsginfoService = errormsginfoService;
|
_dt_stationInfoRepository = dt_stationInfoRepository;
|
_dt_taskRepositiry = dt_taskRepositiry;
|
}
|
|
public Task Execute(IJobExecutionContext context)
|
{
|
|
bool flag = context.JobDetail.JobDataMap.TryGetValue("JobParams", out object? value);
|
if (flag && value != null)
|
{
|
OtherDevice device = (OtherDevice)value;
|
try
|
{
|
#region 生成入库任务
|
if (!OHTJob.oHTReadData.R_GZJ_isWork)
|
{
|
throw new Exception($"规整机投入使用信号为false");
|
}
|
Dt_Task task = new Dt_Task();
|
|
if (OHTJob.oHTReadData.R_RGVMode && OHTJob.oHTReadData.R_DK_isready)//RGV上料模式,且东跨架子有上料信号
|
{
|
var station=_dt_stationInfoRepository.QueryFirst(v=>v.msg== "东跨架子");
|
task.SourceAddress = station.Row + "-" + station.Column + "-1";
|
task.TargetAddress = "";
|
task.Grade = 1;
|
task.Remark = (int)MateTypeEnum.ZiChan;
|
}
|
else if (OHTJob.oHTReadData.R_RGVMode && OHTJob.oHTReadData.R_XK_isready)//RGV上料模式,且西跨架子有上料信号
|
{
|
var station = _dt_stationInfoRepository.QueryFirst(v => v.msg == "西跨架子");
|
task.SourceAddress = station.Row + "-" + station.Column + "-1";
|
task.TargetAddress = "";
|
var DKstation = _dt_stationInfoRepository.QueryFirst(v => v.msg == "东跨架子");
|
string address= DKstation.Row + "-" + DKstation.Column + "-1";
|
var oldtask = _dt_taskRepositiry.QueryFirst(v=>v.SourceAddress== address);
|
if (oldtask!=null && oldtask.TaskState== (int)TaskInStatusEnum.InNew)
|
{
|
task.Grade = 2;
|
}
|
else
|
{
|
task.Grade = 1;
|
}
|
task.Remark = (int)MateTypeEnum.ZiChan;
|
}
|
else if (OHTJob.oHTReadData.R_CCMode && OHTJob.oHTReadData.R_XK_isready)//人工叉车上料模式,且西跨架子有上料信号
|
{
|
var station = _dt_stationInfoRepository.QueryFirst(v => v.msg == "西跨架子");
|
task.SourceAddress = station.Row + "-" + station.Column + "-1";
|
task.TargetAddress = "";
|
task.Grade = 1;
|
task.Remark = (int)MateTypeEnum.WaiGou;
|
}
|
else if (OHTJob.oHTReadData.R_CCMode && OHTJob.oHTReadData.R_DK_isready)//人工叉车上料模式,且东跨架子有上料信号
|
{
|
var station = _dt_stationInfoRepository.QueryFirst(v => v.msg == "东跨架子");
|
task.SourceAddress = station.Row + "-" + station.Column + "-1";
|
task.TargetAddress = "";
|
var XKstation = _dt_stationInfoRepository.QueryFirst(v => v.msg == "西跨架子");
|
string address= XKstation.Row + "-" + XKstation.Column + "-1";
|
var oldtask = _dt_taskRepositiry.QueryFirst(v => v.SourceAddress == address);
|
if (oldtask != null && oldtask.TaskState == (int)TaskInStatusEnum.InNew)
|
{
|
task.Grade = 2;
|
}
|
else
|
{
|
task.Grade = 1;
|
}
|
task.Remark = (int)MateTypeEnum.WaiGou;
|
}
|
else
|
{
|
throw new Exception($"规整机当前信号不满足入库任务生成条件");
|
}
|
task.Roadway = "TC01";
|
task.TaskType = (int)TaskInboundTypeEnum.Inbound;
|
task.TaskState = (int)TaskInStatusEnum.InNew;
|
|
_dt_taskRepositiry.AddData(task);
|
|
#endregion
|
}
|
catch (Exception ex)
|
{
|
_ErrormsginfoService.UpdateErrorMsg(ex.Message, 2);
|
}
|
}
|
|
|
return Task.CompletedTask;
|
}
|
|
|
/// <summary>
|
/// 任务实体转换成命令Model
|
/// </summary>
|
/// <param name="task">任务实体</param>
|
/// <returns></returns>
|
/// <exception cref="Exception"></exception>
|
public OHTTaskCommand? ConvertToOHTTaskCommand([NotNull] Dt_Task task)
|
{
|
OHTTaskCommand oHtTaskCommand = new OHTTaskCommand();
|
|
oHtTaskCommand.W_Task_Type = 1;
|
oHtTaskCommand.W_Load_Layer = 0;
|
oHtTaskCommand.W_Pick_Line = 1;
|
|
string[] SourceCodes = task.SourceAddress.Split("-");
|
if (SourceCodes.Length == 3)
|
{
|
oHtTaskCommand.W_Pick_Line = Convert.ToInt16(SourceCodes[1]);
|
oHtTaskCommand.W_Put_Column = Convert.ToInt16(SourceCodes[2]);
|
oHtTaskCommand.W_Put_Layer = Convert.ToInt16(SourceCodes[3]);
|
}
|
else
|
{
|
//数据配置错误
|
_taskService.UpdateTaskExceptionMessage(task.TaskNum, $"任务源地址配置错误!");
|
return null;
|
}
|
string[] targetCodes = task.TargetAddress.Split("-");
|
if (targetCodes.Length == 3)
|
{
|
oHtTaskCommand.W_Put_Line = Convert.ToInt16(targetCodes[1]);
|
oHtTaskCommand.W_Put_Column = Convert.ToInt16(targetCodes[2]);
|
oHtTaskCommand.W_Put_Layer = Convert.ToInt16(targetCodes[3]);
|
}
|
else
|
{
|
//数据配置错误
|
_taskService.UpdateTaskExceptionMessage(task.TaskNum, $"任务目标地址配置错误");
|
return null;
|
}
|
return oHtTaskCommand;
|
}
|
|
|
/// <summary>
|
/// 获取任务
|
/// </summary>
|
/// <returns></returns>
|
private Dt_Task? GetTask()
|
{
|
Dt_Task task;
|
task = _taskService.QueryStackerCraneTask("R01");
|
return task;
|
}
|
|
|
}
|
|
|
}
|