Admin
2026-01-18 b593c2d4ada3244f4a256ca18a23c3fef609f234
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/WMSCruJob.cs
@@ -55,7 +55,8 @@
            _locationInfoService = locationInfoService;
            _taskService=taskService;
        }
        private static readonly object _taskProcessLock = new object();
        private const int TASK_PROCESS_TIMEOUT = 3000; // 3秒超时
        public Task StartAsync(CancellationToken cancellationToken)
        {
@@ -63,6 +64,13 @@
            return Task.CompletedTask;
        }
        private void DoWorkWheel(object state)
        {
            if (!Monitor.TryEnter(_taskProcessLock, TASK_PROCESS_TIMEOUT))
            {
                return;
            }
            try
        {
            // å®šä¹‰çŠ¶æ€å¸¸é‡ï¼Œé¿å…é­”æ³•æ•°å­—
            const int PLC_IN_FINISH = (int)InTaskStatusEnum.PLC_InFinish;
@@ -96,6 +104,18 @@
            ProcessInAndNewTasks(tasksToProcess, allTasks, excludedRoadways);   //下发堆垛机
            ProcessOutFinishTasks(tasksToProcess, allTasks);    //下发输送线任务
        }
            catch (Exception ex)
            {
                Console.WriteLine($"任务处理异常:{ex.Message}");
            }
            finally
            {
                // å¿…须释放锁,否则会导致死锁
                Monitor.Exit(_taskProcessLock);
            }
        }
        private void ProcessInAndNewTasks(List<Dt_Task> tasksToProcess, List<Dt_Task> allTasks, HashSet<string> excludedRoadways)
        {
@@ -118,10 +138,17 @@
                    x.Roadway == task.Roadway &&
                    (x.TaskStatus == SC_IN_EXECUTING ||
                     x.TaskStatus == SC_OUT_EXECUTING ||
                     x.TaskStatus == RELOCATION_EXECUTING));
                     x.TaskStatus == RELOCATION_EXECUTING || x.TaskStatus == RELOCCATION_NEW));
                if (hasExecutingTask)
                    continue;
                if(task.TaskStatus == OUT_NEW)
                {
                    bool SCNewTasks = allTasks.Any(x => x.TaskStatus != OUT_NEW && x.TargetAddress == task.TargetAddress);
                    if (SCNewTasks)
                        continue;
                }
                //判断是否需要移库
                WebResponseContent webResponse=JudgmentIsRelocations(task);
@@ -328,7 +355,6 @@
                        _taskService.AddData(task);
                        _locationInfoService.UpdateData(dt_Locations);
                        _stockInfoService.UpdateData(dt_StockInfo);
                        //_stockInfoService.Repository.AddData(dt_StockInfo);
                        _unitOfWorkManage.CommitTran();
                        //进行下发给堆垛机任务