using Autofac.Core;
|
using Microsoft.AspNetCore.Components.Routing;
|
using Newtonsoft.Json;
|
using OfficeOpenXml.FormulaParsing.Excel.Functions.Math;
|
using Quartz;
|
using System.Reflection;
|
using WIDESEAWCS_Common.TaskEnum;
|
using WIDESEAWCS_Core;
|
using WIDESEAWCS_IBasicInfoRepository;
|
using WIDESEAWCS_IPackInfoRepository;
|
using WIDESEAWCS_ITaskInfoRepository;
|
using WIDESEAWCS_ITaskInfoService;
|
using WIDESEAWCS_QuartzJob;
|
using WIDESEAWCS_QuartzJob.DTO;
|
using WIDESEAWCS_Tasks.ConveyorLineJob;
|
using WIDESEAWCS_Tasks.StackPlateJob;
|
using ICacheService = WIDESEAWCS_Core.Caches.ICacheService;
|
|
namespace WIDESEAWCS_Tasks
|
{
|
[DisallowConcurrentExecution]
|
public class StackPlate : JobBase, IJob
|
{
|
private readonly ICacheService _cacheService;
|
private readonly ITaskService _taskService;
|
private readonly ITaskRepository _taskRepository;
|
private readonly IStationMangerRepository _stationMangerRepository;
|
private readonly IDt_PackaxisRepository _packaxisRepository;
|
|
public StackPlate(ICacheService cacheService, ITaskService taskService, ITaskRepository taskRepository, IStationMangerRepository stationMangerRepository, IDt_PackaxisRepository packaxisRepository)
|
{
|
_cacheService = cacheService;
|
_taskService = taskService;
|
_taskRepository = taskRepository;
|
_stationMangerRepository = stationMangerRepository;
|
_packaxisRepository = packaxisRepository;
|
}
|
|
public Task Execute(IJobExecutionContext context)
|
{
|
CommonConveyorLine device = (CommonConveyorLine)context.JobDetail.JobDataMap.Get("JobParams");
|
//获取当前设备对应的站台
|
StackPlateTaskCommandCommand command = device.ReadCustomer<StackPlateTaskCommandCommand>(device.DeviceCode);
|
|
if (command != null && command.State == 2)
|
{
|
DeviceProtocolDetailDTO? deviceProtocolDetails = device.DeviceProtocolDetailDTOs.FirstOrDefault(x => x.DeviceProParamName == nameof(StackPlateTaskCommandCommand.InteractiveSignal) && x.ProtocalDetailValue == command.InteractiveSignal.ToString());
|
if (deviceProtocolDetails != null)
|
{
|
MethodInfo? method = GetType().GetMethod(deviceProtocolDetails.ProtocolDetailType);
|
if (method != null)
|
{
|
method.Invoke(this, new object[] { device, command });
|
}
|
}
|
}
|
|
return Task.CompletedTask;
|
}
|
|
/// <summary>
|
/// 有料运行,申请入库
|
/// </summary>
|
/// <param name="device"></param>
|
/// <param name="command"></param>
|
public void InStockAllow(CommonConveyorLine device, StackPlateTaskCommandCommand command)
|
{
|
var station = _stationMangerRepository.QueryFirst(x => x.StationDeviceCode == device.DeviceCode);
|
if (station != null && station.Remark != null)//获取站台里面的托盘号
|
{
|
var task = _taskRepository.QueryFirst(x => x.DeviceCode == device.DeviceCode && (x.TaskState == (int)TaskStatusEnum.AGV_Execute || x.TaskState == (int)TaskStatusEnum.AGV_Executing) && x.SourceAddress == station.AGVStationCode);
|
if (task == null)
|
{
|
WebResponseContent content = _taskService.CPEmptyInbound(station.Remark, station.AGVStationCode);
|
}
|
}
|
}
|
|
/// <summary>
|
/// 空位运行,允许叠盘
|
/// </summary>
|
/// <param name="device"></param>
|
/// <param name="command"></param>
|
public void EmptySeatAllow(CommonConveyorLine device, StackPlateTaskCommandCommand command)
|
{
|
var tasks = _taskRepository.QueryData(x => x.DeviceCode == device.DeviceCode && (x.TaskState == (int)TaskStatusEnum.AGV_Execute||x.TaskState==(int)TaskStatusEnum.AGV_Executing));
|
if (tasks.Count > 0 && tasks.Count < 9)
|
{
|
var task = _taskRepository.QueryFirst(x => x.DeviceCode == device.DeviceCode && x.TaskState == (int)TaskStatusEnum.StackPlate_Execute);
|
if(task!= null)
|
{
|
task.TaskState = (int)TaskStatusEnum.AGV_Execute;
|
_taskRepository.UpdateData(task);
|
}
|
}
|
}
|
}
|
}
|