| | |
| | | private readonly ICacheService _cacheService; private readonly IRepository<Dt_Router> _routerRepository; |
| | | private readonly IRepository<Dt_StationManger> _stationMangerRepository; |
| | | private readonly IRepository<Dt_Task> _taskRepository; |
| | | private readonly CommonConveyorLineJob _lineJob; |
| | | //bool SCres = false; |
| | | |
| | | public CommonStackerCraneJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, ICacheService cacheService, IRepository<Dt_Router> routerRepository, IRepository<Dt_StationManger> stationMangerRepository, IRepository<Dt_Task> taskRepository) |
| | | public CommonStackerCraneJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, ICacheService cacheService, IRepository<Dt_Router> routerRepository, IRepository<Dt_StationManger> stationMangerRepository, IRepository<Dt_Task> taskRepository, CommonConveyorLineJob lineJob) |
| | | { |
| | | _taskService = taskService; |
| | | _routerService = routerService; |
| | |
| | | _routerService = routerService; |
| | | _stationMangerRepository = stationMangerRepository; |
| | | _taskRepository = taskRepository; |
| | | _lineJob = lineJob; |
| | | } |
| | | |
| | | public Task Execute(IJobExecutionContext context) |
| | | { |
| | | try |
| | | { |
| | | { |
| | | try |
| | | { |
| | | |
| | | SpeStackerCrane speStackerCrane = (SpeStackerCrane)context.JobDetail.JobDataMap.Get("JobParams"); |
| | | if (speStackerCrane != null) |
| | | { |
| | | GetStackerObject getStackerObject = new GetStackerObject(speStackerCrane); |
| | | if (!getStackerObject.IsEventSubscribed) |
| | | { |
| | | getStackerObject.StackerCraneTaskCompletedEventHandler += CommonStackerCrane_StackerCraneTaskCompletedEventHandler; |
| | | } |
| | | getStackerObject.CheckStackerCraneTaskCompleted(); |
| | | if (getStackerObject.StackerCraneStatusValue == StackerCraneStatus.Normal) |
| | | { |
| | | var a = speStackerCrane.GetValue<StackerCraneDBName, Int32>(StackerCraneDBName.CurrentTaskNum); |
| | | Dt_Task? task = GetTasks(speStackerCrane); |
| | | if (task != null) |
| | | { |
| | | WriteInfo("æ¥æ¾å åæºä»»å¡å·", $"ä»»å¡ä¿¡æ¯,ä»»å¡å·:{task.TaskNum}ï¼å åæºç¼å·{speStackerCrane.DeviceCode}"); |
| | | bool sendFlag = true; |
| | | if (sendFlag) |
| | | { |
| | | StackerCraneTaskCommand? stackerCraneTaskCommand = ConvertToStackerCraneTaskCommand(task); |
| | | if (stackerCraneTaskCommand != null) |
| | | { |
| | | sendFlag = getStackerObject.SendCommand(stackerCraneTaskCommand); |
| | | if (sendFlag) |
| | | { |
| | | speStackerCrane.SetValue(StackerCraneDBName.CommandSend, 1);//å¯å¨å½ä»¤ |
| | | speStackerCrane.LastTaskType = task.TaskType; |
| | | task.Dispatchertime = DateTime.Now; |
| | | task.ExceptionMessage = ""; |
| | | WebResponseContent webResponseContent = _taskService.UpdateTaskStatusToNext(task.TaskNum); |
| | | //å»¶æ¶1s |
| | | Thread.Sleep(1000); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | catch (Exception) |
| | | { |
| | | SpeStackerCrane speStackerCrane = (SpeStackerCrane)context.JobDetail.JobDataMap.Get("JobParams"); |
| | | if (speStackerCrane != null) |
| | | { |
| | | GetStackerObject getStackerObject = new GetStackerObject(speStackerCrane); |
| | | if (!getStackerObject.IsEventSubscribed) |
| | | { |
| | | getStackerObject.StackerCraneTaskCompletedEventHandler += CommonStackerCrane_StackerCraneTaskCompletedEventHandler; |
| | | } |
| | | getStackerObject.CheckStackerCraneTaskCompleted(); |
| | | if (getStackerObject.StackerCraneStatusValue == StackerCraneStatus.Normal) |
| | | { |
| | | //var a = speStackerCrane.GetValue<StackerCraneDBName, Int32>(StackerCraneDBName.CurrentTaskNum); |
| | | Dt_Task? task = GetTasks(speStackerCrane); |
| | | if (task != null) |
| | | { |
| | | WriteInfo("æ¥æ¾å åæºä»»å¡å·", $"ä»»å¡ä¿¡æ¯,ä»»å¡å·:{task.TaskNum}ï¼å åæºç¼å·{speStackerCrane.DeviceCode}"); |
| | | bool sendFlag = true; |
| | | if (sendFlag) |
| | | { |
| | | StackerCraneTaskCommand? stackerCraneTaskCommand = ConvertToStackerCraneTaskCommand(task); //转æ¢ä¸ºå åæºä»»å¡ |
| | | if (stackerCraneTaskCommand != null) |
| | | { |
| | | sendFlag = getStackerObject.SendCommand(stackerCraneTaskCommand); //åéå åæºä»»å¡ |
| | | if (sendFlag) |
| | | { |
| | | speStackerCrane.SetValue(StackerCraneDBName.CommandSend, 1);//å¯å¨å½ä»¤ |
| | | speStackerCrane.LastTaskType = task.TaskType; |
| | | task.Dispatchertime = DateTime.Now; |
| | | task.ExceptionMessage = ""; |
| | | |
| | | throw; |
| | | } |
| | | return Task.CompletedTask; |
| | | } |
| | | WebResponseContent webResponseContent = _taskService.UpdateTaskStatusToNext(task.TaskNum); |
| | | //å»¶æ¶1s |
| | | Thread.Sleep(1000); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | catch (Exception) |
| | | { |
| | | |
| | | throw; |
| | | } |
| | | return Task.CompletedTask; |
| | | } |
| | | |
| | | |
| | | private void CommonStackerCrane_StackerCraneTaskCompletedEventHandler(object? sender, StackerCraneTaskCompletedEventArgs e) |
| | | { |
| | |
| | | { |
| | | var TaskNum = speStackerCrane.GetValue<StackerCraneDBName, Int32>(StackerCraneDBName.CurrentTaskNum); |
| | | WriteInfo("å åæºä»»å¡å®æ", $"ä»»å¡å·:{TaskNum}"); |
| | | _taskService.StackCraneTaskCompleted(e.TaskNum); |
| | | bool res = _taskService.StackCraneTaskCompleted(e.TaskNum); |
| | | if(res == true) |
| | | { |
| | | speStackerCrane.SetValue(StackerCraneDBName.WorkType, 5); |
| | | |
| | | } |
| | | WriteInfo("å åæºä»»å¡å®æåé¦ä»»å¡å·", $"ä»»å¡ä¿¡æ¯,ä»»å¡å·:{e.TaskNum}"); |
| | | speStackerCrane.SetValue(StackerCraneDBName.WorkType, 5); |
| | | return; |
| | | //SCres=true; |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// è·åä»»å¡ |
| | | /// </summary> |
| | |
| | | private Dt_Task? GetTasks(SpeStackerCrane commonStackerCrane) |
| | | { |
| | | Dt_Task? task; |
| | | // PLCç¶ææ£æ¥ï¼WorkTypeå¿
须为0ï¼ç©ºé²ç¶æï¼ |
| | | var workType = commonStackerCrane.GetValue<StackerCraneDBName, byte>(StackerCraneDBName.StackerCraneWorkStatus); |
| | | //var workType = commonStackerCrane.GetValue<StackerCraneDBName, byte>(StackerCraneDBName.StackerCraneWorkStatus); |
| | | if (workType != 0) |
| | | { |
| | | return null; |
| | | } |
| | | |
| | | //å åæºæ§è¡ä¸ |
| | | if (_taskRepository.QueryFirst(x => x.DeviceCode == commonStackerCrane.DeviceCode && x.TaskState == TaskStatusEnum.SC_Executing.ObjToInt()) != null) |
| | |
| | | } |
| | | |
| | | task = _taskService.QueryStackerCraneInTask(commonStackerCrane.DeviceCode); //è·åå
¥åºä»»å¡ |
| | | List<Dt_Task> YKtasks = _taskService.QueryStackerCraneYKTasks(commonStackerCrane.DeviceCode); |
| | | |
| | | |
| | | if (task != null) |
| | | { |
| | | return task; //妿æä»»å¡åç´æ¥ä¸åç»å åæº |
| | | } |
| | | else |
| | | { |
| | | //è¿è¡è·åå åæºåºåºä»»å¡ |
| | | List<Dt_Task> tasks = _taskService.QueryStackerCraneOutTasks(commonStackerCrane.DeviceCode); |
| | | foreach (var item in tasks) |
| | | { |
| | | if (OutTaskStationIsOccupied(item) != null) |
| | | { |
| | | if (item.Roadway == "SC01") |
| | | { |
| | | if (item.Depth == 1) return item; |
| | | //è°åWMSæ¥å£è¿è¡å¤ææ¯å¦éè¦è¿è¡ç§»åº |
| | | Dt_Task dt_Task = OutTaskMovelibrary(item); |
| | | if (dt_Task != null) return dt_Task; |
| | | |
| | | } |
| | | if (task.Roadway == "SC02") return task; //妿æä»»å¡åç´æ¥ä¸åç»å åæº |
| | | if (task.Depth == 1) return task; |
| | | //2æ·±ä½è¿è¡å¤ææ¯å¦è¦ç§»åº |
| | | Dt_Task dt_Task = _taskService.RequestWMSTaskMovelibrary(task); |
| | | if (dt_Task != null) return dt_Task; |
| | | } |
| | | else if (YKtasks.Count > 0) //åºä½è°æ¨ |
| | | { |
| | | foreach (var item in YKtasks) |
| | | { |
| | | if (item.Roadway == "SC01") |
| | | { |
| | | if (item.Depth == 1) return item; |
| | | //è°åWMSæ¥å£è¿è¡å¤ææ¯å¦éè¦è¿è¡ç§»åº |
| | | Dt_Task dt_Task = OutTaskMovelibrary(item); |
| | | if (dt_Task != null) return dt_Task; |
| | | |
| | | else |
| | | { |
| | | return item; |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |
| | | else |
| | | { |
| | | //è¿è¡è·åå åæºåºåºä»»å¡ |
| | | List<Dt_Task> tasks = _taskService.QueryStackerCraneOutTasks(commonStackerCrane.DeviceCode); |
| | | |
| | | foreach (var item in tasks) |
| | | { |
| | | //if (item.TargetAddress == "2021"||item.TargetAddress == "2020") |
| | | //{ |
| | | // ////bool IsOccupied = _lineJob.GetPick(); |
| | | |
| | | // //if (!IsOccupied) |
| | | // //{ |
| | | // // return null; |
| | | // //} |
| | | //} |
| | | if (OutTaskStationIsOccupied(item) != null) |
| | | { |
| | | if (item.Roadway == "SC01") |
| | | { |
| | | if (item.Depth == 1) return item; |
| | | //è°åWMSæ¥å£è¿è¡å¤ææ¯å¦éè¦è¿è¡ç§»åº |
| | | Dt_Task dt_Task = OutTaskMovelibrary(item); |
| | | if (dt_Task != null) return dt_Task; |
| | | |
| | | } |
| | | else |
| | | { |
| | | return item; |
| | | } |
| | | } |
| | | |
| | | } |
| | | } |
| | | |
| | | |
| | | return task; |
| | | } |
| | |
| | | return task; |
| | | } |
| | | } |
| | | //if (task.NextAddress == "2021" || task.NextAddress == "2020") |
| | | //{ |
| | | // DeviceProDTO? deviceProDTO1 = conveyorLine.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == "2008" || x.DeviceChildCode == "2009" || x.DeviceChildCode == "2015" || x.DeviceChildCode == "2016" && x.DeviceProParamName == "IsOccupied"); //æ ¹æ®å åæºå°åï¼å°ååç§°æ¾åè®® |
| | | // if (deviceProDTO != null) |
| | | // { |
| | | // bool IsOccupied2008 = conveyorLine.GetValue<W_ConveyorLineDB, bool>(W_ConveyorLineDB.IsOccupied, "2008"); |
| | | // bool IsOccupied2009 = conveyorLine.GetValue<W_ConveyorLineDB, bool>(W_ConveyorLineDB.IsOccupied, "2009"); |
| | | // bool IsOccupied2015 = conveyorLine.GetValue<W_ConveyorLineDB, bool>(W_ConveyorLineDB.IsOccupied, "2015"); |
| | | // bool IsOccupied2016 = conveyorLine.GetValue<W_ConveyorLineDB, bool>(W_ConveyorLineDB.IsOccupied, "2016"); |
| | | |
| | | // //夿æ¯å¦æç« |
| | | // if (IsOccupied2008 && IsOccupied2009 && IsOccupied2015 && IsOccupied2016) |
| | | // { |
| | | // return null; |
| | | // } |
| | | // else |
| | | // { |
| | | // return task; |
| | | // } |
| | | // } |
| | | //} |
| | | } |
| | | } |
| | | catch (Exception ex) |