wangxinhui
2026-03-26 5c272c606bdf2da3577dbaa5f48d0ee163f1e7d2
ÏîÄ¿´úÂë/WCS/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs
@@ -231,7 +231,7 @@
                            return WebResponseContent.Instance.Error($"未找到站台配置信息");
                        }
                        //获取路由信息
                        List<Dt_Router> routers = _routerRepository.QueryData(x => x.InOutType == item.TaskType && (item.SourceAddress == x.StartPosi || item.RoadWay == x.StartPosi) && x.Depth==1);
                        List<Dt_Router> routers = _routerRepository.QueryData(x => x.InOutType == item.TaskType && (item.SourceAddress == x.StartPosi || item.RoadWay == x.StartPosi || stationManger.StationDeviceCode==x.StartPosi) && x.Depth==1);
                        router = routers.FirstOrDefault();
                        if (router == null)
                        {
@@ -251,7 +251,7 @@
                                }
                                else
                                {
                                    task.CurrentAddress = router.StartPosi;
                                    task.CurrentAddress = router.StartPosi == "AGV" ? item.SourceAddress : router.StartPosi;
                                    task.NextAddress = router.NextPosi;
                                    task.DeviceCode = router.ChildPosiDeviceCode;
                                }
@@ -701,7 +701,15 @@
            else
                return BaseDal.QueryFirst(x => x.DeviceCode == deviceNo && x.CurrentAddress == currentAddress && x.TaskState == (int)TaskStatusEnum.SC_Execute, TaskOrderBy);
        }
        private static int OldorNew = 0;
        private static Dictionary<string, int> dict = new Dictionary<string, int>
        {
            { "SC01_YL", 0 },
            { "SC02_YL", 0 },
            { "SC03_YLDual", 0 },
            { "SC04_YLDual", 0 },
            { "SC05_YLDual", 0 }
        };
        private readonly static object lockerOldorNew = new object();
        /// <summary>
        /// åŽŸæ–™åº“ä»»åŠ¡æŸ¥è¯¢
        /// </summary>
@@ -710,66 +718,70 @@
        /// <returns>返回任务实体对象,可能为null</returns>
        public Dt_Task QueryStackerYLTask(string deviceNo,TaskTypeGroup? taskTypeGroup= null)
        {
            if (taskTypeGroup == null)
            lock (lockerOldorNew)
            {
                Dt_Task taskSend = BaseDal.QueryFirst(x => x.DeviceCode == deviceNo && x.TaskState == (int)TaskStatusEnum.SC_Execute && x.TaskType != TaskTypeEnum.OldYLOutbound.ObjToInt(), TaskOrderBy);
                if (taskSend == null)
                int OldorNew = dict[deviceNo];
                if (taskTypeGroup == null)
                {
                    OldorNew = 1;
                    List<Dt_Task> specificTasks = BaseDal.QueryData(t => t.DeviceCode == deviceNo && t.TaskState == (int)TaskStatusEnum.SC_Execute && t.TaskType == TaskTypeEnum.OldYLOutbound.ObjToInt()).OrderBy(t => t.CreateDate.Date)
                            .ThenBy(t => t.Grade)
                            .ThenBy(t => t.TaskNum)
                            .ToList();
                    if (specificTasks.Any())
                    Dt_Task taskSend = BaseDal.QueryFirst(x => x.DeviceCode == deviceNo && x.TaskState == (int)TaskStatusEnum.SC_Execute && x.TaskType != TaskTypeEnum.OldYLOutbound.ObjToInt(), TaskOrderBy);
                    if (taskSend == null || OldorNew == 0)
                    {
                        //根据时间筛查严格排序
                        Dt_Task taskCheck = BaseDal.QueryData(t => t.TaskState == (int)TaskStatusEnum.SC_Execute && t.TaskType == TaskTypeEnum.OldYLOutbound.ObjToInt()).OrderBy(t => t.CreateDate.Date)
                            .ThenBy(t => t.Grade)
                            .ThenBy(t => t.TaskNum)
                            .FirstOrDefault();
                        Dt_Task taskCheckSend = specificTasks.FirstOrDefault();
                        if (taskCheck.CreateDate.Date == taskCheckSend.CreateDate.Date && taskCheckSend.Grade <= taskCheck.Grade)
                        dict[deviceNo] = 1;
                        List<Dt_Task> specificTasks = BaseDal.QueryData(t => t.DeviceCode == deviceNo && t.TaskState == (int)TaskStatusEnum.SC_Execute && t.TaskType == TaskTypeEnum.OldYLOutbound.ObjToInt()).OrderBy(t => t.CreateDate.Date)
                                .ThenBy(t => t.Grade)
                                .ThenBy(t => t.TaskNum)
                                .ToList();
                        if (specificTasks.Any())
                        {
                            taskSend = taskCheckSend;
                            //根据时间筛查严格排序
                            Dt_Task taskCheck = BaseDal.QueryData(t => t.TaskState == (int)TaskStatusEnum.SC_Execute && t.TaskType == TaskTypeEnum.OldYLOutbound.ObjToInt()).OrderBy(t => t.CreateDate.Date)
                                .ThenBy(t => t.Grade)
                                .ThenBy(t => t.TaskNum)
                                .FirstOrDefault();
                            Dt_Task taskCheckSend = specificTasks.FirstOrDefault();
                            if (taskCheck.CreateDate.Date == taskCheckSend.CreateDate.Date && taskCheckSend.Grade <= taskCheck.Grade)
                            {
                                taskSend = taskCheckSend;
                            }
                        }
                    }
                    else
                    {
                        dict[deviceNo] = 0;
                    }
                    return taskSend;
                }
                else
                {
                    OldorNew = 0;
                }
                return taskSend;
            }
            else
            {
                Dt_Task taskSend = null;
                if (OldorNew == 0)
                {
                    OldorNew = 1;
                    List<Dt_Task> specificTasks = BaseDal.QueryData(t => t.DeviceCode == deviceNo && t.TaskState == (int)TaskStatusEnum.SC_Execute && t.TaskType == TaskTypeEnum.OldYLOutbound.ObjToInt()).OrderBy(t => t.CreateDate.Date)
                            .ThenBy(t => t.Grade)
                            .ThenBy(t => t.TaskNum)
                            .ToList();
                    if (specificTasks.Any())
                    Dt_Task taskSend = null;
                    if (OldorNew == 0)
                    {
                        //根据时间筛查严格排序
                        Dt_Task taskCheck = BaseDal.QueryData(t => t.TaskState == (int)TaskStatusEnum.SC_Execute && t.TaskType == TaskTypeEnum.OldYLOutbound.ObjToInt()).OrderBy(t => t.CreateDate.Date)
                            .ThenBy(t => t.Grade)
                            .ThenBy(t => t.TaskNum)
                            .FirstOrDefault();
                        Dt_Task taskCheckSend = specificTasks.FirstOrDefault();
                        if (taskCheck.CreateDate.Date == taskCheckSend.CreateDate.Date && taskCheckSend.Grade <= taskCheck.Grade)
                        dict[deviceNo] = 1;
                        List<Dt_Task> specificTasks = BaseDal.QueryData(t => t.DeviceCode == deviceNo && t.TaskState == (int)TaskStatusEnum.SC_Execute && t.TaskType == TaskTypeEnum.OldYLOutbound.ObjToInt()).OrderBy(t => t.CreateDate.Date)
                                .ThenBy(t => t.Grade)
                                .ThenBy(t => t.TaskNum)
                                .ToList();
                        if (specificTasks.Any())
                        {
                            taskSend = taskCheckSend;
                            //根据时间筛查严格排序
                            Dt_Task taskCheck = BaseDal.QueryData(t => t.TaskState == (int)TaskStatusEnum.SC_Execute && t.TaskType == TaskTypeEnum.OldYLOutbound.ObjToInt()).OrderBy(t => t.CreateDate.Date)
                                .ThenBy(t => t.Grade)
                                .ThenBy(t => t.TaskNum)
                                .FirstOrDefault();
                            Dt_Task taskCheckSend = specificTasks.FirstOrDefault();
                            if (taskCheck.CreateDate.Date == taskCheckSend.CreateDate.Date && taskCheckSend.Grade <= taskCheck.Grade)
                            {
                                taskSend = taskCheckSend;
                            }
                        }
                    }
                    else
                    {
                        dict[deviceNo] = 0;
                        taskSend = BaseDal.QueryFirst(x => x.DeviceCode == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskType != TaskTypeEnum.OldYLOutbound.ObjToInt() && x.TaskState == (int)TaskStatusEnum.SC_Execute, TaskOrderBy);
                    }
                    return taskSend;
                }
                else
                {
                    OldorNew = 0;
                    taskSend = BaseDal.QueryFirst(x => x.DeviceCode == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskType != TaskTypeEnum.OldYLOutbound.ObjToInt() && x.TaskState == (int)TaskStatusEnum.SC_Execute, TaskOrderBy);
                }
                return taskSend;
            }
        }