using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Quartz;
using WIDESEAWCS_Common;
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_IBasicInfoRepository;
using WIDESEAWCS_ITaskInfoRepository;
using WIDESEAWCS_ITaskInfoService;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_QuartzJob;
namespace WIDESEAWCS_Tasks
{
///
/// 龙门架
///
[DisallowConcurrentExecution]
public class GantryJob : JobBase, IJob
{
private readonly ITaskRepository _taskRepository;
private readonly ITaskService _taskService;
private readonly IContainerItemRepository _containerItemRepository;
public GantryJob(ITaskRepository taskRepository, ITaskService taskService, IContainerItemRepository containerItemRepository)
{
_taskRepository = taskRepository;
_taskService = taskService;
_containerItemRepository = containerItemRepository;
}
public Task Execute(IJobExecutionContext context)
{
try
{
bool flag = context.JobDetail.JobDataMap.TryGetValue("JobParams", out object? value);
if (flag && value != null && value is OtherDevice)
{
OtherDevice otherDevice = (OtherDevice)value;
byte gantryStatus = otherDevice.GetValue(GantryDBName.GantryStatus);
byte gantryAutoStatus = otherDevice.GetValue(GantryDBName.GantryAutoStatus);
byte gantryWorkStatus = otherDevice.GetValue(GantryDBName.GantryWorkStatus);
if(gantryStatus == 1 && gantryAutoStatus == 3 && gantryWorkStatus == 0)
{
// 逻辑处理
// 1. 读取任务
// 2. 任务执行
// 3. 任务完成
Dt_Task? task = _taskService.QueryAGantryUnExecuteTask(otherDevice.DeviceCode);
if(task != null)
{
string[] takePositions = task.CurrentAddress.Split("*");
if(takePositions.Length != 5)
{
//WriteError
return Task.CompletedTask;
}
string[] putPositions = task.NextAddress.Split("*");
if (putPositions.Length != 5)
{
//WriteError
return Task.CompletedTask;
}
Dt_ContainerItem containerItem = _containerItemRepository.QueryFirst(x => x.ItemCode == task.PalletCode);
if (containerItem == null)
{
//WriteError
return Task.CompletedTask;
}
otherDevice.SetValue(GantryDBName.TwoHand, true);
otherDevice.SetValue(GantryDBName.TaskNum, task.TaskNum);
//otherDevice.SetValue(GantryDBName.TakePosition, Convert.ToInt32(takePositions[0]));
otherDevice.SetValue(GantryDBName.TakePositionX, Convert.ToInt32(takePositions[1]));
otherDevice.SetValue(GantryDBName.TakePositionY, Convert.ToInt32(takePositions[2]));
otherDevice.SetValue(GantryDBName.TakePositionZ, Convert.ToInt32(takePositions[3]));
otherDevice.SetValue(GantryDBName.TakePositionR, Convert.ToInt32(takePositions[4]));
//otherDevice.SetValue(GantryDBName.PutPosition, Convert.ToInt32(putPositions[0]));
otherDevice.SetValue(GantryDBName.PutPositionX, Convert.ToInt32(putPositions[1]));
otherDevice.SetValue(GantryDBName.PutPositionY, Convert.ToInt32(putPositions[2]));
otherDevice.SetValue(GantryDBName.PutPositionZ, Convert.ToInt32(putPositions[3]));
otherDevice.SetValue(GantryDBName.PutPositionR, Convert.ToInt32(putPositions[4]));
otherDevice.SetValue(GantryDBName.Length, containerItem.ItemLength);
otherDevice.SetValue(GantryDBName.Width, containerItem.ItemWidth);
otherDevice.SetValue(GantryDBName.Height, containerItem.ItemHeight);
otherDevice.SetValue(GantryDBName.WorkType, 1);
otherDevice.SetValue(GantryDBName.StartCommand, 1);
task.TaskState = TaskStatusEnum.Gantry_Executing.ObjToInt();
_taskRepository.UpdateData(task);
}
}
else if(gantryWorkStatus == 5)
{
}
}
}
catch (Exception ex)
{
}
return Task.CompletedTask;
}
public Dt_Task GetTask()
{
return new Dt_Task();
}
}
}