#region << 版 本 注 释 >>
|
/*----------------------------------------------------------------
|
* 命名空间:WIDESEAWCS_Tasks.ConveyorLineJob
|
* 创建者:胡童庆
|
* 创建时间:2024/8/2 16:13:36
|
* 版本:V1.0.0
|
* 描述:
|
*
|
* ----------------------------------------------------------------
|
* 修改人:
|
* 修改时间:
|
* 版本:V1.0.1
|
* 修改说明:
|
*
|
*----------------------------------------------------------------*/
|
#endregion << 版 本 注 释 >>
|
|
using AutoMapper;
|
using HslCommunication;
|
using Quartz;
|
using System;
|
using System.Linq;
|
using System.Text;
|
using System.Text.RegularExpressions;
|
using System.Threading.Tasks;
|
using WIDESEA_Common.Log;
|
using WIDESEAWCS_BasicInfoService;
|
using WIDESEAWCS_Common;
|
using WIDESEAWCS_Core.Helper;
|
using WIDESEAWCS_DTO.BasicInfo;
|
using WIDESEAWCS_IBasicInfoRepository;
|
using WIDESEAWCS_IBasicInfoService;
|
using WIDESEAWCS_ITaskInfoRepository;
|
using WIDESEAWCS_ITaskInfoService;
|
using WIDESEAWCS_Model.Models;
|
using WIDESEAWCS_Model.Models.System;
|
using WIDESEAWCS_QuartzJob;
|
using WIDESEAWCS_QuartzJob.DTO;
|
using WIDESEAWCS_QuartzJob.Service;
|
using WIDESEAWCS_Tasks.ConveyorLineJob;
|
|
namespace WIDESEAWCS_Tasks
|
{
|
[DisallowConcurrentExecution]
|
public class CommonConveyorLineOutJob : JobBase, IJob
|
{
|
private readonly ITaskService _taskService;
|
private readonly IMapper _mapper;
|
|
private readonly IOrderDetailsService _orderDetailsService;
|
private readonly ITaskRepository _taskRepository;
|
private readonly IContainerRepository _containerRepository;
|
|
private static Dt_Container DischargeContainer;
|
|
private static int dischargeStation = 8;
|
|
public CommonConveyorLineOutJob(ITaskService taskService, IMapper mapper, IOrderDetailsService orderDetailsService, ITaskRepository taskRepository, IContainerRepository containerRepository)
|
{
|
_taskService = taskService;
|
_mapper = mapper;
|
_orderDetailsService = orderDetailsService;
|
_taskRepository = taskRepository;
|
_containerRepository = containerRepository;
|
}
|
|
|
|
public Task Execute(IJobExecutionContext context)
|
{
|
if (DischargeContainer == null)
|
{
|
DischargeContainer = _containerRepository.QueryFirst(x => x.ContainerEnable && x.ContainerType == ContainerTypeEnum.DischargeContainer.ObjToInt());
|
if (DischargeContainer != null)
|
{
|
dischargeStation = DischargeContainer.ContainerNo;
|
}
|
}
|
|
bool flag = context.JobDetail.JobDataMap.TryGetValue("JobParams", out object? value);
|
if (flag && value != null && value is OtherDevice)
|
{
|
OtherDevice otherDevice = (OtherDevice)value;
|
try
|
{
|
bool request = otherDevice.GetValue<ConveyorLineStationDBName, bool>(ConveyorLineStationDBName.PLCStationRequest); //申请
|
bool response = otherDevice.GetValue<ConveyorLineStationDBName, bool>(ConveyorLineStationDBName.PLCStationResponse); //应答
|
|
bool wcsResponse = otherDevice.GetValue<ConveyorLineStationDBName, bool>(ConveyorLineStationDBName.WCSStationResponse); //应答
|
|
if (request && !response && !wcsResponse)
|
{
|
DeviceProDTO? devicePro = otherDevice.DeviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == ConveyorLineStationDBName.PLCStationBarcode.ToString());
|
if (devicePro != null)
|
{
|
string barcode = otherDevice.GetValue<ConveyorLineStationDBName, string>(ConveyorLineStationDBName.PLCStationBarcode);
|
|
//List<byte> bytes = otherDevice.Communicator.Read(devicePro.DeviceProAddress, devicePro.DeviceProDataLength).ToList();
|
|
//byte[] temp = bytes.ToArray().SelectMiddle(2, bytes.IndexOf(0) - 2);
|
|
//barcode = Encoding.Default.GetString(temp);
|
|
if (!string.IsNullOrEmpty(barcode))
|
{
|
OrderInfo orderInfo = _orderDetailsService.GetOrderInfoByBarcode(barcode);
|
|
_orderDetailsService.ToMes(barcode, 3);
|
|
if (orderInfo.Width >= AppSettings.Get("MinWidth").ObjToInt() && orderInfo.Width <= AppSettings.Get("MaxWidth").ObjToInt() && orderInfo.Length >= AppSettings.Get("MinLength").ObjToInt() && orderInfo.Length <= AppSettings.Get("MaxLength").ObjToInt() || orderInfo.Length >= AppSettings.Get("MinWidth").ObjToInt() && orderInfo.Length <= AppSettings.Get("MaxWidth").ObjToInt() && orderInfo.Width >= AppSettings.Get("MinLength").ObjToInt() && orderInfo.Width <= AppSettings.Get("MaxLength").ObjToInt())
|
{
|
Dt_Task task = _taskRepository.QueryFirst(x => x.PalletCode == barcode);
|
if (task == null)
|
{
|
try
|
{
|
var (taskFlag, gTask, message) = _taskService.GenerateTask(orderInfo);
|
if (taskFlag && gTask != null)
|
{
|
task = gTask;
|
if (!string.IsNullOrEmpty(task.ItemInfo))
|
{
|
string[] itemInfos = task.ItemInfo.Split("*");
|
if (itemInfos.Length == 3)
|
{
|
otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTarget, Convert.ToInt32(itemInfos[0]));
|
otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTarget, Convert.ToInt32(itemInfos[1]));
|
otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTarget, Convert.ToInt32(itemInfos[2]));
|
}
|
}
|
|
otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTarget, Convert.ToInt32(task.TargetAddress));
|
otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTaskNum, task.TaskNum);
|
otherDevice.SetValue(ConveyorLineStationDBName.WCSStationResponse, true);
|
}
|
else
|
{
|
//if (message.Contains("10001"))
|
//{
|
// otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTarget, Convert.ToInt32(orderInfo.Length));
|
// otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTarget, Convert.ToInt32(orderInfo.Width));
|
// otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTarget, Convert.ToInt32(orderInfo.Thickness));
|
// otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTarget, dischargeStation);
|
// otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTaskNum, 999);
|
// otherDevice.SetValue(ConveyorLineStationDBName.WCSStationResponse, true);
|
//}
|
//else if (message.Contains("10002"))
|
//{
|
// WriteError($"{otherDevice.DeviceCode}-{otherDevice.DeviceName}", message);
|
//}
|
//else
|
{
|
otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTarget, Convert.ToInt32(orderInfo.Length));
|
otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTarget, Convert.ToInt32(orderInfo.Width));
|
otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTarget, Convert.ToInt32(orderInfo.Thickness));
|
otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTarget, dischargeStation);
|
otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTaskNum, 998);
|
otherDevice.SetValue(ConveyorLineStationDBName.WCSStationResponse, true);
|
|
WriteError(nameof(CommonConveyorLineOutJob), message);
|
}
|
}
|
}
|
catch (Exception ex)
|
{
|
if (ex.Message.Contains("10001"))
|
{
|
otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTarget, Convert.ToInt32(orderInfo.Length));
|
otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTarget, Convert.ToInt32(orderInfo.Width));
|
otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTarget, Convert.ToInt32(orderInfo.Thickness));
|
otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTarget, dischargeStation);
|
otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTaskNum, 999);
|
otherDevice.SetValue(ConveyorLineStationDBName.WCSStationResponse, true);
|
}
|
else if (ex.Message.Contains("10002"))
|
{
|
WriteError($"{otherDevice.DeviceCode}-{otherDevice.DeviceName}", ex.Message, ex);
|
}
|
else
|
{
|
otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTarget, Convert.ToInt32(orderInfo.Length));
|
otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTarget, Convert.ToInt32(orderInfo.Width));
|
otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTarget, Convert.ToInt32(orderInfo.Thickness));
|
otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTarget, dischargeStation);
|
otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTaskNum, 998);
|
otherDevice.SetValue(ConveyorLineStationDBName.WCSStationResponse, true);
|
|
WriteError(nameof(CommonConveyorLineOutJob), ex.Message, ex);
|
}
|
}
|
}
|
else
|
{
|
if (!string.IsNullOrEmpty(task.ItemInfo))
|
{
|
string[] itemInfos = task.ItemInfo.Split("*");
|
if (itemInfos.Length == 3)
|
{
|
otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTarget, Convert.ToInt32(itemInfos[0]));
|
otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTarget, Convert.ToInt32(itemInfos[1]));
|
otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTarget, Convert.ToInt32(itemInfos[2]));
|
}
|
}
|
|
otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTarget, Convert.ToInt32(task.TargetAddress));
|
otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTaskNum, task.TaskNum);
|
otherDevice.SetValue(ConveyorLineStationDBName.WCSStationResponse, true);
|
}
|
}
|
else
|
{
|
otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTarget, Convert.ToInt32(orderInfo.Length));
|
otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTarget, Convert.ToInt32(orderInfo.Width));
|
otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTarget, Convert.ToInt32(orderInfo.Thickness));
|
otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTarget, dischargeStation);
|
otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTaskNum, 999);
|
otherDevice.SetValue(ConveyorLineStationDBName.WCSStationResponse, true);
|
}
|
}
|
else
|
{
|
otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTarget, dischargeStation);
|
otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTaskNum, 997);
|
otherDevice.SetValue(ConveyorLineStationDBName.WCSStationResponse, true);
|
//otherDevice.SetValue(ConveyorLineStationDBName.WCSStationNoBarcode, true);
|
}
|
}
|
|
}
|
else
|
{
|
if (wcsResponse && !request)
|
otherDevice.SetValue(ConveyorLineStationDBName.WCSStationResponse, false); //清除响应
|
}
|
|
}
|
catch (Exception ex)
|
{
|
otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTarget, dischargeStation);
|
otherDevice.SetValue(ConveyorLineStationDBName.WCSStationTaskNum, 996);
|
otherDevice.SetValue(ConveyorLineStationDBName.WCSStationResponse, true);
|
|
WriteError($"{otherDevice.DeviceCode}-{otherDevice.DeviceName}", ex.Message, ex);
|
}
|
}
|
else
|
{
|
WriteError(nameof(CommonConveyorLineOutJob), "参数错误,未传递设备参数或设备类型错误");
|
}
|
return Task.CompletedTask;
|
}
|
|
public int[] GetIndexArray<T>(T[] values, T value)
|
{
|
List<int> result = new List<int>();
|
for (int i = 0; i < values.Length; i++)
|
{
|
if (value.Equals(values[i]))
|
{
|
result.Add(i);
|
}
|
}
|
return result.ToArray();
|
}
|
}
|
}
|