using Newtonsoft.Json;
using Quartz;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_IBasicInfoRepository;
using WIDESEAWCS_ITaskInfoRepository;
using WIDESEAWCS_ITaskInfoService;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_QuartzJob.DTO;
using WIDESEAWCS_QuartzJob.Models;
using WIDESEAWCS_QuartzJob.Repository;
using WIDESEAWCS_QuartzJob.Service;
using WIDESEAWCS_QuartzJob;
using WIDESEAWCS_Tasks.DBNames;
using WIDESEAWCS_Core.Helper;
using ICacheService = WIDESEAWCS_Core.Caches.ICacheService;
using WIDESEAWCS_Tasks.ConveyorLineJob;
namespace WIDESEAWCS_Tasks
{
///
/// 纸箱桁架
///
[DisallowConcurrentExecution]
public class TrussCartonJob : JobBase, IJob
{
private readonly ICacheService _cacheService;
private readonly ITaskService _taskService;
private readonly ITaskExecuteDetailService _taskExecuteDetailService;
private readonly ITaskRepository _taskRepository;
private readonly IStationMangerRepository _stationMangerRepository;
private readonly IRouterRepository _routerRepository;
private readonly IRouterService _routerService;
private readonly IRouterExtension _routerExtension;
private readonly List warehouseDevices;
public TrussCartonJob(ICacheService cacheService, ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, ITaskRepository taskRepository, IStationMangerRepository stationMangerRepository, IRouterRepository routerRepository, IRouterService routerService, IRouterExtension routerExtension)
{
_cacheService = cacheService;
_taskService = taskService;
_taskExecuteDetailService = taskExecuteDetailService;
_taskRepository = taskRepository;
_stationMangerRepository = stationMangerRepository;
_routerRepository = routerRepository;
_routerService = routerService;
_routerExtension = routerExtension;
string? warehouseDevicesStr = _cacheService.Get(nameof(Dt_WarehouseDevice));
if (!string.IsNullOrEmpty(warehouseDevicesStr))
{
warehouseDevices = JsonConvert.DeserializeObject>(warehouseDevicesStr) ?? new List();
}
else
{
warehouseDevices = new List();
}
}
public Task Execute(IJobExecutionContext context)
{
try
{
bool flag = context.JobDetail.JobDataMap.TryGetValue("JobParams", out object? value);
if (flag && value != null)
{
OtherDevice device = (OtherDevice)value;
List stationMangers = _stationMangerRepository.QueryData(x => x.StationDeviceCode == device.DeviceCode);
//获取协议
DeviceProDTO? deviceProRead = device.DeviceProDTOs.Where(x => x.DeviceChildCode == device.DeviceCode && x.DeviceProParamType == nameof(R_TrussCartonDB)).OrderBy(x => x.DeviceProOffset).FirstOrDefault();
DeviceProDTO? deviceProWrite = device.DeviceProDTOs.Where(x => x.DeviceChildCode == device.DeviceCode && x.DeviceProParamType == nameof(W_TrussCartonDB)).OrderBy(x => x.DeviceProOffset).FirstOrDefault();
//判断协议是否满足
if (deviceProRead != null && deviceProWrite != null)
{
device.SetValue(W_TrussCartonDB.W_CartonHeart, false, device.DeviceCode);
//写入心跳
foreach (var item in stationMangers)
{
//码垛状态
bool Call = device.GetValue(GetCartonCall(item.StackerCraneStationCode), item.StackerCraneCode);
if (Call && item.IsOccupied == 0)
{
//请求WMS叫料任务
}
else if (Call && item.IsOccupied == 1)
{
//请求WMS空托叠盘任务
}
}
device.SetValue(W_TrussCartonDB.W_CartonHeart, true, device.DeviceCode);
}
else
{
WriteError(device.DeviceCode, $"未找到设备编号{device.DeviceCode}的协议信息");
}
}
}
catch (Exception ex)
{
WriteError(nameof(TrussCartonJob),ex.Message);
}
return Task.CompletedTask;
}
///
/// 获取桁架呼叫信号
///
public R_TrussCartonDB GetCartonCall(string StationCode)
{
switch (StationCode)
{
case "1":
return R_TrussCartonDB.R_CartonCall1;
case "2":
return R_TrussCartonDB.R_CartonCall2;
case "3":
return R_TrussCartonDB.R_CartonCall3;
case "4":
return R_TrussCartonDB.R_CartonCall4;
case "5":
return R_TrussCartonDB.R_CartonCall5;
case "6":
return R_TrussCartonDB.R_CartonCall6;
default:
throw new Exception("未定义工位");
}
}
}
}