zhangchengsong
16 小时以前 2381da9301f2a269e763b1325fb1ea0d5dfd1005
ÏîÄ¿´úÂë/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs
@@ -27,6 +27,7 @@
using WIDESEAWCS_ISystemServices;
using WIDESEAWCS_ITaskInfoRepository;
using WIDESEAWCS_ITaskInfoService;
using WIDESEAWCS_Model;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_Model.Models.System;
using WIDESEAWCS_QuartzJob;
@@ -49,17 +50,23 @@
        private readonly ITaskRepository _taskRepository;
        private readonly IRouterService _routerService;
        private readonly IDt_PlatformStationService _DtPlatformStationService;
        private readonly IDt_roadwayinfoService _Dt_roadwayinfoService;
        public CommonStackerCraneJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, ITaskRepository taskRepository, IRouterService routerService, IDt_PlatformStationService dt_PlatformStationService)
        public CommonStackerCraneJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, IDt_roadwayinfoService dt_roadwayinfoService, ITaskRepository taskRepository, IRouterService routerService, IDt_PlatformStationService dt_PlatformStationService)
        {
            _taskService = taskService;
            _taskExecuteDetailService = taskExecuteDetailService;
            _taskRepository = taskRepository;
            _routerService = routerService;
            _DtPlatformStationService = dt_PlatformStationService;
            _Dt_roadwayinfoService = dt_roadwayinfoService;
        }
        private static readonly Dictionary<string, bool> _deviceLastStatus = new Dictionary<string, bool>();
        public string urlWMSdeverror = WIDESEAWCS_Core.Helper.AppSettings.Configuration["urlWMSdeverror"];
        private static readonly StackerFault[] _stackerFaultEnumCache = Enum.GetValues(typeof(StackerFault)).Cast<StackerFault>().ToArray();
        // ç”¨æ¥è®°å½•哪些任务已经上报过放货中
        private static readonly HashSet<int> _reportedPickupTaskIds = new HashSet<int>();
        public Task Execute(IJobExecutionContext context)
@@ -124,7 +131,7 @@
                            WebResponseContent webResponse = _taskService.StackCraneTaskCompleted(commonStackerCrane.CurrentTaskNum, PalletCode);
                            if (webResponse.Status)
                            {
                                Task.Run(() => WriteLog.Write_Log("堆垛机任务上报完成信息", "堆垛机任务上报完成信息", $"【{commonStackerCrane.DeviceCode}】库堆垛机上报任务号:【{commonStackerCrane.CurrentTaskNum}】完成信号!"));
                               WriteLog.Write_Log("堆垛机任务上报完成信息", "堆垛机任务上报完成信息", $"【{commonStackerCrane.DeviceCode}】库堆垛机上报任务号:【{commonStackerCrane.CurrentTaskNum}】完成信号!");
                                bool ddjfk = commonStackerCrane.SetValue(StackerCraneDBName.WorkType, 5);
                            }
@@ -468,7 +475,28 @@
                {
                    var dtTask = _taskRepository.QueryFirst(x => x.TaskNum == taskNum);
                    if (dtTask == null) return;
                    //堆垛机放货中是任务状态回调拿pickup
                    // ===================== å‡ºåº“放货中:只上报1次 =====================
                    if (dtTask.TaskType == (int)TaskTypeEnum.Inbound && stackerCraneWorkStatusDes == "放货中")
                    {
                        // åˆ¤æ–­æ˜¯å¦å·²ç»ä¸ŠæŠ¥è¿‡
                        if (_reportedPickupTaskIds.Contains(taskNum))
                        {
                            return; // å·²ä¸ŠæŠ¥ï¼Œç›´æŽ¥è·³è¿‡
                        }
                        // ç¬¬ä¸€æ¬¡ä¸ŠæŠ¥
                        string Result = WMSTaskStatusEnum.pickup.GetDescription();
                        Dt_roadwayinfo roadwayinfo = _Dt_roadwayinfoService.GetRoadwayinfo(dtTask.Roadway);
                        CommandResult command = _taskService.taskreturn(int.Parse(dtTask.WMStaskid), Result, roadwayinfo.WarehouseInvType, "");
                        // æ ‡è®°ä¸ºå·²ä¸ŠæŠ¥
                        _reportedPickupTaskIds.Add(taskNum);
                    }
                    // ä»»åŠ¡å®Œæˆæ—¶æ¸…ç†è®°å½•
                    if (stackerCraneWorkStatusDes == "任务完成")
                    {
                        _reportedPickupTaskIds.Remove(taskNum);
                    }
                    string[] targets = { "G02", "G03", "G04", "C02", "C01" };
                    if (dtTask.TaskType != 100 || !targets.Contains(dtTask.TargetAddress)) return;
@@ -493,18 +521,21 @@
                    conveyorLine.Communicator.Write<short>(handShake.DeviceProAddress, writeValue);
                }
                catch
                { }
                catch(Exception e)
                {
                    WriteLog.Write_Log("出库屏蔽光栅/堆垛入库要放货异常", "错误", e.ToString());
                }
        }
        /// <summary>
        /// è¯»å–故障(优化GC)
        /// æ•…障信息
        /// </summary>
        /// <param name="crane"></param>
        /// <returns></returns>
        public string ReadStackerFaults(CommonStackerCrane crane)
        {
            try
            {
                foreach (StackerFault fault in Enum.GetValues(typeof(StackerFault)))
                foreach (StackerFault fault in _stackerFaultEnumCache)
                {
                    try
                    {
@@ -512,13 +543,10 @@
                        if (isFault)
                            return fault.GetDesc();
                    }
                    catch { }
                    catch { continue; }
                }
            }
            catch (Exception ex)
            {
                WriteLog.Write_Log("DB107故障读取异常", "错误", ex.ToString());
            }
            catch { }
            return string.Empty;
        }
    }