using AutoMapper;
|
using HslCommunication;
|
using Newtonsoft.Json;
|
using OfficeOpenXml.Drawing.Chart;
|
using Quartz;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
using WIDESEAWCS_Common.ShuttleCarEnum;
|
using WIDESEAWCS_Common.TaskEnum;
|
using WIDESEAWCS_Core;
|
using WIDESEAWCS_Core.Helper;
|
using WIDESEAWCS_DTO.WMSInfo;
|
using WIDESEAWCS_IShuttleCar;
|
using WIDESEAWCS_ITaskInfoRepository;
|
using WIDESEAWCS_ITaskInfoService;
|
using WIDESEAWCS_Model.Models;
|
using WIDESEAWCS_QuartzJob;
|
using WIDESEAWCS_QuartzJob.DTO;
|
using WIDESEAWCS_QuartzJob.Service;
|
using WIDESEAWCS_QuartzJob.StackerCrane.Enum;
|
using WIDESEAWCS_TaskInfoService;
|
using WIDESEAWCS_Tasks.ConveyorLineJob;
|
using WIDESEAWCS_Tasks.ShuttleCarJob;
|
using WIDESEAWCS_Tasks.StackerCraneJob;
|
|
namespace WIDESEAWCS_Tasks
|
{
|
[DisallowConcurrentExecution]
|
partial class CommonShuttleCarJob : JobBase, IJob
|
{
|
private readonly ITaskService _taskService;
|
private readonly ITaskRepository _taskRepository;
|
private readonly ITaskHtyService _taskHtyService;
|
private readonly IShuttleCarService _shuttleCarService;
|
private readonly ITaskExecuteDetailService _taskExecuteDetailService;
|
private readonly IRouterService _routerService;
|
private readonly IMapper _mapper;
|
|
public CommonShuttleCarJob(ITaskService taskService, ITaskRepository taskRepository, ITaskHtyService taskHtyService, IShuttleCarService shuttleCarService, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, IMapper mapper)
|
{
|
_taskService = taskService;
|
_taskRepository = taskRepository;
|
_taskHtyService = taskHtyService;
|
_shuttleCarService = shuttleCarService;
|
_taskExecuteDetailService = taskExecuteDetailService;
|
_routerService = routerService;
|
_mapper = mapper;
|
}
|
|
public Task Execute(IJobExecutionContext context)
|
{
|
try
|
{
|
ShuttleCar shuttleCar = (ShuttleCar)context.JobDetail.JobDataMap.Get("JobParams");
|
if (shuttleCar != null)
|
{
|
shuttleCar.Communicator.IsReadAfterWrite = false;
|
ShuttleCarTaskCommandR command = ReadCustomer<ShuttleCarTaskCommandR>(shuttleCar, shuttleCar.DeviceCode);//读取穿梭车信息
|
if (command != null && command.JoinStatus == 1)
|
{
|
#region 穿梭车任务完成
|
var complete = shuttleCar.GetValue<ShuttleCarDBName, bool>(ShuttleCarDBName.TaskComplete);
|
if (complete && command.TaskTypeComplete > (short)ShuttleCarTaskComplete.Standby && command.Status == command.TaskTypeComplete)
|
{
|
_taskService.ShuttleCarTaskCompleted(command.number, command.TaskTypeComplete);
|
shuttleCar.SetValue(ShuttleCarDBName.ConfirmComplete, true, shuttleCar.DeviceCode);
|
}
|
#endregion
|
|
#region 获取堆垛机移车/移库完成任务
|
GetSC_CarFinish();
|
#endregion
|
|
#region 创建移车充电任务
|
if (command.Err_Status == (short)ShuttleCarErr.LowBattery || command.ElectricQuantity <= (short)ShuttleCarErr.LowBattery)
|
{
|
//生成堆垛机移车任务&穿梭车充电任务,判断是否有穿梭车在充电
|
Dt_Task _Task = _taskRepository.QueryFirst(x => x.TaskType == TaskOtherTypeEnum.RelocationCarCharging.ObjToInt());
|
if (_Task != null)
|
{
|
if (_Task.ShuttleCarCode != shuttleCar.DeviceCode)
|
{
|
ShuttleCar shuttleCar1 = Storage.Devices.Where(x => x.DeviceCode.Equals(_Task.ShuttleCarCode)).FirstOrDefault() as ShuttleCar;
|
ShuttleCarTaskCommandR command1 = ReadCustomer<ShuttleCarTaskCommandR>(shuttleCar1, shuttleCar1.DeviceCode);//读取穿梭车信息
|
if (command1 != null && command1.JoinStatus == 1)
|
{
|
if (command1.Status == (short)ShuttleCarStatus.Charging && command1.ElectricQuantity >= 50)
|
{
|
var ShuttleCar = QueryCode(shuttleCar1.DeviceCode);
|
_taskService.AddRelocationCarTask(ShuttleCar.ShuttleCarPosition, "", ShuttleCar.ShuttleCarCode);
|
shuttleCar1.SetValue(ShuttleCarDBName.TaskType, (short)ShuttleCarStatus.QuitCharging);
|
}
|
}
|
}
|
}
|
else
|
{
|
var ShuttleCar = QueryCode(shuttleCar.DeviceCode);
|
_taskService.AddRelocationCarTask(ShuttleCar.ShuttleCarPosition, "003-002-001", ShuttleCar.ShuttleCarCode, ShuttleCarTaskType.Charging.ToString());
|
}
|
}
|
#endregion
|
|
#region 获取移车/出入库任务
|
Get_CarTask(shuttleCar, command);
|
#endregion
|
}
|
}
|
}
|
catch (Exception ex)
|
{
|
//Console.Out.WriteLine(nameof(CommonShuttleCarJob) + ":" + ex.ToString());
|
}
|
return Task.CompletedTask;
|
}
|
}
|
}
|