From 00e64cba66377cb75c9c947908627fe9f631746e Mon Sep 17 00:00:00 2001
From: Admin <Admin@ADMIN>
Date: 星期三, 21 一月 2026 13:53:14 +0800
Subject: [PATCH] '手动上传'
---
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/WMSCruJob.cs | 254 ++++++++++++++++++++++++++++++++++----------------
1 files changed, 173 insertions(+), 81 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..6b305e7 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,46 +55,72 @@
_locationInfoService = locationInfoService;
_taskService=taskService;
}
-
+ private static readonly object _taskProcessLock = new object();
+ private const int TASK_PROCESS_TIMEOUT = 3000; // 3绉掕秴鏃�
public Task StartAsync(CancellationToken cancellationToken)
{
_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)
{
- // 瀹氫箟鐘舵�佸父閲忥紝閬垮厤榄旀硶鏁板瓧
- 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 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;
+ 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 || (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)
+ {
+ Console.WriteLine($"浠诲姟澶勭悊寮傚父锛歿ex.Message}");
+ }
+ finally
+ {
+ // 蹇呴』閲婃斁閿侊紝鍚﹀垯浼氬鑷存閿�
+ Monitor.Exit(_taskProcessLock);
+ }
+
+
}
private void ProcessInAndNewTasks(List<Dt_Task> tasksToProcess, List<Dt_Task> allTasks, HashSet<string> excludedRoadways)
@@ -109,38 +135,50 @@
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));
+ foreach (var task in inAndNewTasks)
+ {
+ // 妫�鏌ュ悓涓�宸烽亾鏄惁鏈夋鍦ㄦ墽琛岀殑浠诲姟
+ 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));
- if (hasExecutingTask)
- continue;
+ if (hasExecutingTask)
+ continue;
- //鍒ゆ柇鏄惁闇�瑕佺Щ搴�
- WebResponseContent webResponse=JudgmentIsRelocations(task);
- if (!webResponse.Status) continue;
+ if (task.TaskStatus == OUT_NEW)
+ {
+ bool SCNewTasks = allTasks.Any(x => x.TaskStatus != OUT_NEW && x.TargetAddress == task.TargetAddress);
+ if (SCNewTasks)
+ 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);
+ //鍒ゆ柇鏄惁闇�瑕佺Щ搴�
+ WebResponseContent webResponse = JudgmentIsRelocations(task);
+ if (!webResponse.Status) continue;
- UpdateTaskStatus(task, result,
- successStatus: task.TaskStatus == PLC_IN_FINISH ? SC_IN_EXECUTING : SC_OUT_EXECUTING,1);
+
+ // 涓嬪彂鍫嗗灈鏈轰换鍔�
+ 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)
@@ -151,30 +189,61 @@
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);
+ }
}
}
@@ -186,9 +255,14 @@
task.TaskStatus = successStatus;
if(task.TaskStatus== (int)OutTaskStatusEnum.SC_OutExecuting)
{
- string Result = MesOutTaskStatusEnum.鍑哄簱寮�濮�.GetDescription();
+ string Result = MesOutTaskStatusEnum.Start.GetDescription();
//璋冨彇涓婃父绯荤粺鍙嶉寮�濮嬩换鍔�
_taskService.OutStoreDocCallback(task.TaskNum,Result, "鎿嶄綔鎴愬姛");
+ }else if(task.TaskStatus == (int)InTaskStatusEnum.PLC_InExecuting)
+ {
+ string Result = MesInTaskStatusEnum.Start.GetDescription();
+ //璋冨彇涓婃父绯荤粺鍙嶉寮�濮嬩换鍔�
+ _taskService.InStoreDocCallback(task.TaskNum, Result, "鎿嶄綔鎴愬姛",task.PalletCode,"");
}
}
else
@@ -220,17 +294,20 @@
/// <returns></returns>
public WebResponseContent JudgmentIsRelocations(Dt_Task dt_Task)
{
+ const int PLC_IN_FINISH = (int)InTaskStatusEnum.PLC_InFinish;
+ const int SC_IN_EXECUTING = (int)InTaskStatusEnum.SC_IntExecuting;
+ const int SC_OUT_EXECUTING = (int)OutTaskStatusEnum.SC_OutExecuting;
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();
int locrow = judgmentRow(dt_Location.RoadwayNo, dt_Location.Row);
Dt_LocationInfo shallowLocation = _locationInfoService.Repository.QueryData(x => x.RoadwayNo == dt_Location.RoadwayNo && x.Row == locrow && x.Layer == dt_Location.Layer && x.Column == dt_Location.Column).FirstOrDefault();
if (shallowLocation.LocationStatus == (int)LocationStatusEnum.Free) return content.OK();
- if (shallowLocation.LocationStatus != (int)(int)LocationStatusEnum.InStock) return content.Error();
+
//鍒ゆ柇鏄惁鏈夌Щ搴撲换鍔�
var TransferTask = _taskService.Repository.QueryData(x=>x.TaskStatus== (int)RelocationTaskStatusEnum.RelocationNew && x.CurrentAddress== shallowLocation.LocationCode).FirstOrDefault();
@@ -245,17 +322,29 @@
int.Parse(TransferTask.PalletType),
TransferTask.CurrentAddress,
TransferTask.NextAddress,
- TransferTask.TargetAddress);
+ dt_Task.TargetAddress);
if (result.IsSuccess)
{
+ TransferTask.TaskStatus = (int)RelocationTaskStatusEnum.RelocationExecuting;
+ _taskService.UpdateData(TransferTask);
return content.OK();
}
else
{
+ UpdateTaskStatus(dt_Task, result,
+ successStatus: dt_Task.TaskStatus == PLC_IN_FINISH ? SC_IN_EXECUTING : SC_OUT_EXECUTING, 1);
+
WriteLog.GetLog("鍒ゆ柇宸烽亾鍐呯Щ搴�").Write($"涓嬪彂鍫嗗灈鏈轰换鍔″け璐ワ紝鍘熷洜锛歿result.Message}", $"鐢熸垚绉诲簱浠诲姟:GenerateTransferTask");
return content.Error();
}
}
+
+ var CuttTransferTask = _taskService.Repository.QueryData(x => x.TaskStatus == (int)RelocationTaskStatusEnum.RelocationNew).FirstOrDefault();
+ //鍒ゆ柇褰撳墠鏄惁鏈夌Щ搴撲换鍔�
+ if (CuttTransferTask!=null) return content.Error();
+
+
+ if (shallowLocation.LocationStatus != (int)LocationStatusEnum.InStock) return content.Error();
//鐢熸垚绉诲簱浠诲姟锛岃繘琛屼笅鍙�
return content =GenerateTransferTask(shallowLocation.LocationCode);
@@ -328,11 +417,12 @@
_taskService.AddData(task);
_locationInfoService.UpdateData(dt_Locations);
_stockInfoService.UpdateData(dt_StockInfo);
- //_stockInfoService.Repository.AddData(dt_StockInfo);
_unitOfWorkManage.CommitTran();
+
+ return webResponse.Error("宸茬敓鎴愮Щ搴撲换鍔�");
//杩涜涓嬪彂缁欏爢鍨涙満浠诲姟
- WCSginseng result = _taskService.SC_IssueTasks(
+ /*WCSginseng result = _taskService.SC_IssueTasks(
task.TaskId,
int.Parse(task.Roadway),
task.TaskNum,
@@ -343,13 +433,15 @@
task.TargetAddress);
if (result.IsSuccess)
{
+ task.TaskStatus = (int)RelocationTaskStatusEnum.RelocationExecuting;
+ _taskService.UpdateData(task);
return webResponse.OK();
}
else
{
WriteLog.GetLog("鍒ゆ柇宸烽亾鍐呯Щ搴�").Write($"涓嬪彂鍫嗗灈鏈轰换鍔″け璐ワ紝鍘熷洜锛歿result.Message}", $"鐢熸垚绉诲簱浠诲姟:GenerateTransferTask");
return webResponse.Error();
- }
+ }*/
}
else
{
--
Gitblit v1.9.3