| | |
| | | _timer = new Timer(DoWorkWheel, null, TimeSpan.Zero, TimeSpan.FromSeconds(3)); |
| | | return Task.CompletedTask; |
| | | } |
| | | |
| | | public static List<string> InStationareaList = new List<string>() { "1113", "1114", "1115", "1116", "1117", "1118", "1119", "1120", "1121", "1122" }; |
| | | |
| | | private void DoWorkWheel(object state) |
| | | { |
| | | if (!Monitor.TryEnter(_taskProcessLock, TASK_PROCESS_TIMEOUT)) |
| | |
| | | { |
| | | // å®ä¹ç¶æå¸¸éï¼é¿å
éæ³æ°å |
| | | const int PLC_IN_FINISH = (int)InTaskStatusEnum.PLC_InFinish; |
| | | const int PLC_IN_InNew = (int)InTaskStatusEnum.InNew; |
| | | const int OUT_NEW = (int)OutTaskStatusEnum.OutNew; |
| | | const int SC_OUT_FINISH = (int)OutTaskStatusEnum.SC_OutFinish; |
| | | const int SC_IN_EXECUTING = (int)InTaskStatusEnum.SC_IntExecuting; |
| | |
| | | .Where(x => |
| | | (x.TaskStatus == PLC_IN_FINISH || |
| | | x.TaskStatus == OUT_NEW || |
| | | x.TaskStatus == SC_OUT_FINISH) && |
| | | x.TaskStatus == SC_OUT_FINISH || (x.TaskStatus == PLC_IN_InNew && InStationareaList.Contains(x.SourceAddress))) && |
| | | !excludedRoadways.Contains(x.Roadway)) |
| | | .ToList(); |
| | | |
| | | // æç¶æåç»å¤çï¼åå°é夿¥è¯¢ |
| | | ProcessInAndNewTasks(tasksToProcess, allTasks, excludedRoadways); //ä¸åå åæº |
| | | ProcessOutFinishTasks(tasksToProcess, allTasks); //ä¸åè¾éçº¿ä»»å¡ |
| | | ProcessInPalltask(tasksToProcess, allTasks); |
| | | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | |
| | | var inAndNewTasks = tasksToProcess |
| | | .Where(x => x.TaskStatus == PLC_IN_FINISH || x.TaskStatus == OUT_NEW).OrderBy(x=>x.CreateDate) |
| | | .ToList(); |
| | | |
| | | foreach (var task in inAndNewTasks) |
| | | if(inAndNewTasks.Count > 0) |
| | | { |
| | | // æ£æ¥åä¸å··éæ¯å¦ææ£å¨æ§è¡çä»»å¡ |
| | | bool hasExecutingTask = allTasks.Any(x => |
| | | x.TaskId != task.TaskId && |
| | | x.Roadway == task.Roadway && |
| | | (x.TaskStatus == SC_IN_EXECUTING || |
| | | x.TaskStatus == SC_OUT_EXECUTING || |
| | | x.TaskStatus == RELOCATION_EXECUTING || x.TaskStatus == RELOCCATION_NEW)); |
| | | |
| | | if (hasExecutingTask) |
| | | continue; |
| | | |
| | | if(task.TaskStatus == OUT_NEW) |
| | | foreach (var task in inAndNewTasks) |
| | | { |
| | | bool SCNewTasks = allTasks.Any(x => x.TaskStatus != OUT_NEW && x.TargetAddress == task.TargetAddress); |
| | | if (SCNewTasks) |
| | | // æ£æ¥åä¸å··éæ¯å¦ææ£å¨æ§è¡çä»»å¡ |
| | | bool hasExecutingTask = allTasks.Any(x => |
| | | x.TaskId != task.TaskId && |
| | | x.Roadway == task.Roadway && |
| | | (x.TaskStatus == SC_IN_EXECUTING || |
| | | x.TaskStatus == SC_OUT_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); |
| | | if (!webResponse.Status) continue; |
| | | |
| | | |
| | | // ä¸åå åæºä»»å¡ |
| | | WCSginseng result = _taskService.SC_IssueTasks( |
| | | task.TaskId, |
| | | int.Parse(task.Roadway), |
| | | task.TaskNum, |
| | | task.PalletCode, |
| | | int.Parse(task.PalletType), |
| | | task.CurrentAddress, |
| | | task.NextAddress, |
| | | task.TargetAddress); |
| | | |
| | | UpdateTaskStatus(task, result, |
| | | successStatus: task.TaskStatus == PLC_IN_FINISH ? SC_IN_EXECUTING : SC_OUT_EXECUTING, 1); |
| | | } |
| | | |
| | | //夿æ¯å¦éè¦ç§»åº |
| | | WebResponseContent webResponse=JudgmentIsRelocations(task); |
| | | if (!webResponse.Status) continue; |
| | | |
| | | // ä¸åå åæºä»»å¡ |
| | | WCSginseng result = _taskService.SC_IssueTasks( |
| | | task.TaskId, |
| | | int.Parse(task.Roadway), |
| | | task.TaskNum, |
| | | task.PalletCode, |
| | | int.Parse(task.PalletType), |
| | | task.CurrentAddress, |
| | | task.NextAddress, |
| | | task.TargetAddress); |
| | | |
| | | UpdateTaskStatus(task, result, |
| | | successStatus: task.TaskStatus == PLC_IN_FINISH ? SC_IN_EXECUTING : SC_OUT_EXECUTING,1); |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | private void ProcessOutFinishTasks(List<Dt_Task> tasksToProcess, List<Dt_Task> allTasks) |
| | |
| | | var outFinishTasks = tasksToProcess |
| | | .Where(x => x.TaskStatus == SC_OUT_FINISH) |
| | | .ToList(); |
| | | |
| | | foreach (var task in outFinishTasks) |
| | | if(outFinishTasks.Count > 0) |
| | | { |
| | | // æ£æ¥åä¸å··éæ¯å¦æå
¶ä»å·²å®æçä»»å¡ |
| | | bool hasOtherFinishTask = allTasks.Any(x => |
| | | x.Roadway == task.Roadway && |
| | | x.TaskStatus == SC_OUT_FINISH && |
| | | x.TaskId != task.TaskId); |
| | | foreach (var task in outFinishTasks) |
| | | { |
| | | // æ£æ¥åä¸å··éæ¯å¦æå
¶ä»å·²å®æçä»»å¡ |
| | | bool hasOtherFinishTask = allTasks.Any(x => |
| | | x.Roadway == task.Roadway && |
| | | x.TaskStatus == SC_OUT_FINISH && |
| | | x.TaskId != task.TaskId); |
| | | |
| | | if (hasOtherFinishTask) |
| | | continue; |
| | | if (hasOtherFinishTask) |
| | | continue; |
| | | |
| | | // ä¸åPLCä»»å¡ |
| | | WCSginseng result = _taskService.PLC_IssueTasks( |
| | | task.TaskId, |
| | | int.Parse(task.Roadway), |
| | | task.TaskNum, |
| | | task.PalletCode, |
| | | int.Parse(task.PalletType), |
| | | task.CurrentAddress, |
| | | task.NextAddress, |
| | | ""); |
| | | // ä¸åPLCä»»å¡ |
| | | WCSginseng result = _taskService.PLC_IssueTasks( |
| | | task.TaskId, |
| | | int.Parse(task.Roadway), |
| | | task.TaskNum, |
| | | task.PalletCode, |
| | | int.Parse(task.PalletType), |
| | | task.CurrentAddress, |
| | | task.NextAddress, |
| | | ""); |
| | | |
| | | UpdateTaskStatus(task, result, PLC_OUT_EXECUTING,2); |
| | | UpdateTaskStatus(task, result, PLC_OUT_EXECUTING, 2); |
| | | } |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | private void ProcessInPalltask(List<Dt_Task> tasksToProcess, List<Dt_Task> allTasks) |
| | | { |
| | | const int PLC_IN_InNew = (int)InTaskStatusEnum.InNew; |
| | | const int PLC_PLC_INEXECUTING = (int)InTaskStatusEnum.PLC_InExecuting; |
| | | var outFinishTasks = tasksToProcess |
| | | .Where(x => x.TaskStatus == PLC_IN_InNew && InStationareaList.Contains(x.SourceAddress)) |
| | | .ToList(); |
| | | if(outFinishTasks.Count > 0) |
| | | { |
| | | foreach (var task in outFinishTasks) |
| | | { |
| | | // ä¸åPLCä»»å¡ |
| | | WCSginseng result = _taskService.PLC_IssueTasks( |
| | | task.TaskId, |
| | | int.Parse(task.Roadway), |
| | | task.TaskNum, |
| | | task.PalletCode, |
| | | int.Parse(task.PalletType), |
| | | task.CurrentAddress, |
| | | task.NextAddress, |
| | | ""); |
| | | |
| | | UpdateTaskStatus(task, result, PLC_PLC_INEXECUTING, 2); |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | string Result = MesOutTaskStatusEnum.åºåºå¼å§.GetDescription(); |
| | | //è°å䏿¸¸ç³»ç»åé¦å¼å§ä»»å¡ |
| | | _taskService.OutStoreDocCallback(task.TaskNum,Result, "æä½æå"); |
| | | }else if(task.TaskStatus == (int)InTaskStatusEnum.PLC_InExecuting) |
| | | { |
| | | string Result = MesInTaskStatusEnum.å
¥åºå¼å§.GetDescription(); |
| | | //è°å䏿¸¸ç³»ç»åé¦å¼å§ä»»å¡ |
| | | _taskService.InStoreDocCallback(task.TaskNum, Result, "æä½æå",task.PalletCode,""); |
| | | } |
| | | } |
| | | else |