From b593c2d4ada3244f4a256ca18a23c3fef609f234 Mon Sep 17 00:00:00 2001
From: Admin <Admin@ADMIN>
Date: 星期日, 18 一月 2026 17:31:48 +0800
Subject: [PATCH] 最新
---
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/WMSCruJob.cs | 88 ++++++++++++++++++++++++++++---------------
1 files changed, 57 insertions(+), 31 deletions(-)
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/WMSCruJob.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/WMSCruJob.cs"
index a9286e1..2f45c56 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/WMSCruJob.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/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)
{
@@ -64,37 +65,56 @@
}
private void DoWorkWheel(object state)
{
- // 瀹氫箟鐘舵�佸父閲忥紝閬垮厤榄旀硶鏁板瓧
- const int PLC_IN_FINISH = (int)InTaskStatusEnum.PLC_InFinish;
- 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;
- const int SC_OUT_EXECUTING = (int)OutTaskStatusEnum.SC_OutExecuting;
- const int RELOCATION_EXECUTING = (int)RelocationTaskStatusEnum.RelocationExecuting;
- const int PLC_OUT_EXECUTING = (int)OutTaskStatusEnum.PLC_OutExecuting;
+ if (!Monitor.TryEnter(_taskProcessLock, TASK_PROCESS_TIMEOUT))
+ {
+ return;
+ }
- // 鑾峰彇褰撳墠浠诲姟鏁版嵁
- List<Dt_Task> allTasks = _taskService.Repository.QueryData();
+ try
+ {
+ // 瀹氫箟鐘舵�佸父閲忥紝閬垮厤榄旀硶鏁板瓧
+ const int PLC_IN_FINISH = (int)InTaskStatusEnum.PLC_InFinish;
+ 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;
+ const int SC_OUT_EXECUTING = (int)OutTaskStatusEnum.SC_OutExecuting;
+ const int RELOCATION_EXECUTING = (int)RelocationTaskStatusEnum.RelocationExecuting;
+ const int PLC_OUT_EXECUTING = (int)OutTaskStatusEnum.PLC_OutExecuting;
- // 鑾峰彇宸烽亾瓒呰繃3涓换鍔$殑璺
- HashSet<string> excludedRoadways = allTasks
- .Where(x => x.NumberSsuances > 3)
- .Select(x => x.Roadway)
- .Distinct()
- .ToHashSet();
+ // 鑾峰彇褰撳墠浠诲姟鏁版嵁
+ List<Dt_Task> allTasks = _taskService.Repository.QueryData();
- // 杩囨护闇�瑕佸鐞嗙殑浠诲姟
- List<Dt_Task> tasksToProcess = allTasks
- .Where(x =>
- (x.TaskStatus == PLC_IN_FINISH ||
- x.TaskStatus == OUT_NEW ||
- x.TaskStatus == SC_OUT_FINISH) &&
- !excludedRoadways.Contains(x.Roadway))
- .ToList();
+ // 鑾峰彇宸烽亾瓒呰繃3涓换鍔$殑璺
+ HashSet<string> excludedRoadways = allTasks
+ .Where(x => x.NumberSsuances > 3)
+ .Select(x => x.Roadway)
+ .Distinct()
+ .ToHashSet();
- // 鎸夌姸鎬佸垎缁勫鐞嗭紝鍑忓皯閲嶅鏌ヨ
- ProcessInAndNewTasks(tasksToProcess, allTasks, excludedRoadways); //涓嬪彂鍫嗗灈鏈�
- ProcessOutFinishTasks(tasksToProcess, allTasks); //涓嬪彂杈撻�佺嚎浠诲姟
+ // 杩囨护闇�瑕佸鐞嗙殑浠诲姟
+ List<Dt_Task> tasksToProcess = allTasks
+ .Where(x =>
+ (x.TaskStatus == PLC_IN_FINISH ||
+ x.TaskStatus == OUT_NEW ||
+ x.TaskStatus == SC_OUT_FINISH) &&
+ !excludedRoadways.Contains(x.Roadway))
+ .ToList();
+
+ // 鎸夌姸鎬佸垎缁勫鐞嗭紝鍑忓皯閲嶅鏌ヨ
+ 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);
@@ -223,7 +250,7 @@
WebResponseContent content = new WebResponseContent();
try
{
- string Locationcodeadd = dt_Task.TaskType == (int)TaskTypeEnum.Inbound ? dt_Task.NextAddress : dt_Task.CurrentAddress;
+ string Locationcodeadd = dt_Task.TaskType == (int)TaskTypeEnum.Inbound ? dt_Task.NextAddress: dt_Task.CurrentAddress ;
Dt_LocationInfo dt_Location = _locationInfoService.Repository.QueryData(x => x.LocationCode == Locationcodeadd).FirstOrDefault();
if (dt_Location.Depth == 1 || dt_Location.RoadwayNo == "5") return content.OK();
@@ -328,7 +355,6 @@
_taskService.AddData(task);
_locationInfoService.UpdateData(dt_Locations);
_stockInfoService.UpdateData(dt_StockInfo);
- //_stockInfoService.Repository.AddData(dt_StockInfo);
_unitOfWorkManage.CommitTran();
//杩涜涓嬪彂缁欏爢鍨涙満浠诲姟
--
Gitblit v1.9.3