| | |
| | | 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; |
| | | |
| | |
| | | public class CommonConveyorLineOutJob : JobBase, IJob |
| | | { |
| | | private readonly ITaskService _taskService; |
| | | private readonly ITaskExecuteDetailService _taskExecuteDetailService; |
| | | private readonly IRouterService _routerService; |
| | | private readonly IOrderDetailsService _OrderDetailsService; |
| | | private readonly IMapper _mapper; |
| | | |
| | | public CommonConveyorLineOutJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, IOrderDetailsService orderDetails, 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; |
| | | _taskExecuteDetailService = taskExecuteDetailService; |
| | | _routerService = routerService; |
| | | _OrderDetailsService = orderDetails; |
| | | _mapper = mapper; |
| | | _orderDetailsService = orderDetailsService; |
| | | _taskRepository = taskRepository; |
| | | _containerRepository = containerRepository; |
| | | } |
| | | |
| | | static string barcode = string.Empty; //鏉$爜 |
| | | |
| | | |
| | | public Task Execute(IJobExecutionContext context) |
| | | { |
| | | try |
| | | 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); //搴旂瓟 |
| | | |
| | |
| | | |
| | | 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); |
| | | if (orderInfo.Width > AppSettings.Get("MaxWidth").ObjToInt() && orderInfo.Width < AppSettings.Get("MinWidth").ObjToInt()) |
| | | { |
| | | 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 (wcsResponse) |
| | | otherDevice.SetValue(ConveyorLineStationDBName.WCSStationResponse, false); //娓呴櫎鍝嶅簲 |
| | | Dt_Task task = _taskRepository.QueryFirst(x => x.PalletCode == barcode); |
| | | if (task == null) |
| | | { |
| | | try |
| | | { |
| | | task = _taskService.GenerateTask(orderInfo); |
| | | if (task != null) |
| | | { |
| | | 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); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | WriteError(nameof(CommonConveyorLineJob), ex.ToString(), 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 |
| | | { |
| | | 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; |
| | | } |