From 4ac3f08f416685db0e218df55750d94556030330 Mon Sep 17 00:00:00 2001
From: HuBingJie <3146306518@qq.com>
Date: 星期四, 06 十一月 2025 20:25:17 +0800
Subject: [PATCH] 1
---
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs | 235 +++++++++++++++++++++++++++-------------------------------
1 files changed, 108 insertions(+), 127 deletions(-)
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs"
index 91fe2b7..8af5db4 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs"
@@ -32,6 +32,8 @@
using System.Threading.Tasks;
using WIDESEAWCS_QuartzJob.StackerCrane;
using WIDESEAWCS_Core.BaseRepository;
+using Autofac.Core;
+using WIDESEAWCS_Tasks.ConveyorLineJob;
namespace WIDESEAWCS_Tasks
{
@@ -58,6 +60,7 @@
{
try
{
+
SpeStackerCrane speStackerCrane = (SpeStackerCrane)context.JobDetail.JobDataMap.Get("JobParams");
if (speStackerCrane != null)
{
@@ -69,9 +72,11 @@
getStackerObject.CheckStackerCraneTaskCompleted();
if (getStackerObject.StackerCraneStatusValue == StackerCraneStatus.Normal)
{
+ var a = speStackerCrane.GetValue<StackerCraneDBName, Int32>(StackerCraneDBName.CurrentTaskNum);
Dt_Task? task = GetTasks(speStackerCrane);
if (task != null)
{
+ WriteInfo("鏌ユ壘鍫嗗灈鏈轰换鍔″彿", $"浠诲姟淇℃伅,浠诲姟鍙�:{task.TaskNum}锛屽爢鍨涙満缂栧彿{speStackerCrane.DeviceCode}");
bool sendFlag = true;
if (sendFlag)
{
@@ -85,7 +90,7 @@
speStackerCrane.LastTaskType = task.TaskType;
task.Dispatchertime = DateTime.Now;
task.ExceptionMessage = "";
- _taskService.UpdateTask(task, TaskStatusEnum.SC_Executing);
+ WebResponseContent webResponseContent = _taskService.UpdateTaskStatusToNext(task.TaskNum);
//寤舵椂1s
Thread.Sleep(1000);
}
@@ -111,74 +116,15 @@
{
if (speStackerCrane.GetValue<StackerCraneDBName, short>(StackerCraneDBName.WorkType) != 5)
{
- StackerCraneTaskCompleted(e.TaskNum, speStackerCrane.DeviceCode);
+ var TaskNum = speStackerCrane.GetValue<StackerCraneDBName, Int32>(StackerCraneDBName.CurrentTaskNum);
+ WriteInfo("鍫嗗灈鏈轰换鍔″畬鎴�", $"浠诲姟鍙�:{TaskNum}");
+ _taskService.StackCraneTaskCompleted(e.TaskNum);
+ WriteInfo("鍫嗗灈鏈轰换鍔″畬鎴愬弽棣堜换鍔″彿", $"浠诲姟淇℃伅,浠诲姟鍙�:{e.TaskNum}");
speStackerCrane.SetValue(StackerCraneDBName.WorkType, 5);
}
}
}
- public WebResponseContent StackerCraneTaskCompleted(int taskNum, string deviceCode)
- {
- try
- {
- Dt_Task task = _taskRepository.QueryFirst(x => x.TaskNum == taskNum);
- if (task != null)
- {
- if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
- {
- Dt_StationManger stationManger = _stationMangerRepository.QueryFirst(x => x.StackerCraneStationCode == task.NextAddress && x.StackerCraneCode == deviceCode);
- if (stationManger == null)
- {
- //_taskExecuteDetailService.AddTaskExecuteDetail(taskNum, $"杈撻�佺嚎鍑哄簱绔欑偣鏈厤缃�,{task.NextAddress}");
- _taskService.UpdateTaskExceptionMessage(taskNum, $"杈撻�佺嚎鍑哄簱绔欑偣鏈厤缃�,{task.NextAddress}");
- WriteError(deviceCode, $"杈撻�佺嚎鍑哄簱绔欑偣鏈厤缃�,{task.NextAddress}");
- return WebResponseContent.Instance.Error($"杈撻�佺嚎鍑哄簱绔欑偣鏈厤缃�,{task.NextAddress}");
- }
- Dt_Router router = _routerRepository.QueryFirst(x => x.InOutType == task.TaskType && x.StartPosi == stationManger.StationCode);
- if (router == null)
- {
- router = _routerRepository.QueryFirst(x => x.ChildPosi == deviceCode && x.ChildPosiDeviceCode == stationManger.StationDeviceCode && x.NextPosi == stationManger.StationCode && x.InOutType == task.TaskType && x.IsEnd);
- if (router != null && router.IsEnd)
- {
- _taskService.TaskCompleted(taskNum);
- }
- else
- {
- _taskService.UpdateTaskExceptionMessage(taskNum, $"鏈壘鍒拌矾鐢变俊鎭�,{task.NextAddress}");
- WriteError(deviceCode, $"鏈壘鍒拌矾鐢变俊鎭�,{task.NextAddress}");
- return WebResponseContent.Instance.Error($"鏈壘鍒拌矾鐢变俊鎭�,{task.NextAddress}");
- }
- }
- if (task.TargetAddress.Contains("1030") || task.TargetAddress.Contains("1026")) //鑷姩涓�绾�
- {
- _taskService.UpdateTask(task, TaskStatusEnum.Line_Execute, deviceCode: stationManger.StationDeviceCode, currentAddress: router.NextPosi);
- }
- }
- else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup || task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup)
- {
- _taskService.TaskCompleted(taskNum);
- }
- else
- {
- WriteError(deviceCode, $"鏈壘鍒拌浠诲姟绫诲瀷鍥炶皟WMS浠诲姟瀹屾垚鎺ュ彛,{task.TaskType}");
- _taskService.UpdateTaskExceptionMessage(taskNum, $"鏈壘鍒拌浠诲姟绫诲瀷鍥炶皟WMS浠诲姟瀹屾垚鎺ュ彛,{task.TaskType}");
- }
-
- }
- else
- {
- WriteError(deviceCode, $"鏈壘鍒颁换鍔′俊鎭�,浠诲姟鍙�:{taskNum}");
- return WebResponseContent.Instance.Error($"鏈壘鍒颁换鍔′俊鎭�,浠诲姟鍙�:{taskNum}");
- }
-
- return WebResponseContent.Instance.OK();
- }
- catch (Exception ex)
- {
- WriteError(deviceCode, $"浠诲姟瀹屾垚閿欒", ex);
- return WebResponseContent.Instance.Error(ex.Message);
- }
- }
/// <summary>
/// 鑾峰彇浠诲姟
/// </summary>
@@ -188,47 +134,74 @@
{
Dt_Task? task;
- if (commonStackerCrane.LastTaskType.GetValueOrDefault().GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
+ //鍫嗗灈鏈烘墽琛屼腑
+ if (_taskRepository.QueryFirst(x => x.DeviceCode == commonStackerCrane.DeviceCode && x.TaskState == TaskStatusEnum.SC_Executing.ObjToInt()) != null)
{
- task = _taskService.QueryStackerCraneInTask(commonStackerCrane.DeviceCode);
- if (task == null)
- {
- task = _taskService.QueryStackerCraneOutTask(commonStackerCrane.DeviceCode);
- }
+ return null;
+ }
+
+ task = _taskService.QueryStackerCraneInTask(commonStackerCrane.DeviceCode); //鑾峰彇鍏ュ簱浠诲姟
+ if (task != null)
+ {
+ if(task.Roadway=="SC02") return task; //濡傛灉鏈変换鍔″垯鐩存帴涓嬪彂缁欏爢鍨涙満
+ if(task.Depth==1) return task;
+ //2娣变綅杩涜鍒ゆ柇鏄惁瑕佺Щ搴�
+
+ Dt_Task dt_Task = _taskService.RequestWMSTaskMovelibrary(task);
+ if (dt_Task != null) return dt_Task;
}
else
{
- task = _taskService.QueryStackerCraneOutTask(commonStackerCrane.DeviceCode);
- if (task == null)
+ //杩涜鑾峰彇鍫嗗灈鏈哄嚭搴撲换鍔�
+ List<Dt_Task> tasks = _taskService.QueryStackerCraneOutTasks(commonStackerCrane.DeviceCode);
+ foreach (var item in tasks)
{
- task = _taskService.QueryStackerCraneInTask(commonStackerCrane.DeviceCode);
- }
- }
-
-
- if (task != null && task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
- {
- if (OutTaskStationIsOccupied(task) != null || true)
- {
- return task;
- }
- else
- {
- List<string> otherOutStaionCodes = _routerService.QueryNextRoutes(commonStackerCrane.DeviceCode, task.NextAddress).Select(x => x.ChildPosi).ToList();
- List<Dt_Task> tasks = _taskService.QueryStackerCraneOutTasks(commonStackerCrane.DeviceCode, otherOutStaionCodes);
- foreach (var item in tasks)
+ if (OutTaskStationIsOccupied(item) != null)
{
- if (OutTaskStationIsOccupied(task) != null)
+ if (item.Roadway == "SC01")
{
- return task;
+ if (item.Depth == 1) return item;
+ //璋冨彇WMS鎺ュ彛杩涜鍒ゆ柇鏄惁闇�瑕佽繘琛岀Щ搴�
+ Dt_Task dt_Task = OutTaskMovelibrary(item);
+ if (dt_Task != null) return dt_Task;
+
+ }
+ else
+ {
+ return item;
}
}
- task = _taskService.QueryStackerCraneInTask(commonStackerCrane.DeviceCode);
}
}
return task;
}
+
+ private Dt_Task? OutTaskMovelibrary([NotNull] Dt_Task task)
+ {
+ string[] targetCodes = task.SourceAddress.Split("-");
+ if (targetCodes[1] == "001")
+ {
+ targetCodes[1] = "002";
+
+ }
+ else if (targetCodes[1] == "004")
+ {
+ targetCodes[1] = "003";
+ }
+ targetCodes[4] = "01";
+ string SourceAddress = string.Join("-", targetCodes); //缁勮娴呭簱浣嶅湴鍧�
+ Dt_Task? tasks = _taskService.QueryStationIsOccupiedOutTasks(task.Roadway, SourceAddress); //鎵炬祬搴撲綅鏄惁鏈変换鍔�
+ if (tasks != null) return tasks;
+ //鍚憌ms鐢宠鍒ゆ柇娴呭簱浣嶆槸鍚︽湁璐э紝鏄惁闇�瑕佽繘琛岀Щ搴�
+ Dt_Task? taskst = _taskService.RequestWMSTaskMovelibrary(task);
+ if (taskst != null) return taskst;
+ return null;
+ }
+
+
+
+
/// <summary>
/// 鍑哄簱浠诲姟鍒ゆ柇鍑哄簱绔欏彴鏄惁琚崰鐢�
/// </summary>
@@ -236,26 +209,27 @@
/// <returns>濡傛灉鏈鍗犵敤锛岃繑鍥炰紶鍏ョ殑浠诲姟淇℃伅锛屽惁鍒欙紝杩斿洖null</returns>
private Dt_Task? OutTaskStationIsOccupied([NotNull] Dt_Task task)
{
- Dt_Router? router = _routerService.QueryNextRoutes(task.Roadway, task.NextAddress).FirstOrDefault();
- if (router != null)
+ try
{
- IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == router.ChildPosiDeviceCode);
+ IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "CL01");
if (device != null)
{
- CommonConveyorLine conveyorLine = (CommonConveyorLine)device;
- if (conveyorLine.IsOccupied(router.ChildPosi))//鍑哄簱绔欏彴鏈鍗犵敤
+ OtherDevice conveyorLine = (OtherDevice)device;
+ DeviceProDTO? deviceProDTO = conveyorLine.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == task.NextAddress && x.DeviceProParamName == "IsOccupied"); //鏍规嵁鍫嗗灈鏈哄湴鍧�锛屽湴鍧�鍚嶇О鎵惧崗璁�
+ if (deviceProDTO != null)
{
- return task;
+ bool B_Event_Test = conveyorLine.Communicator.Read<bool>(deviceProDTO.DeviceProAddress); //鍒ゆ柇杈撻�佺嚎鏄惁鍏佽鏀捐揣淇″彿
+ if (!B_Event_Test)
+ {
+ return task;
+ }
}
}
- else
- {
- _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鏈壘鍒板嚭搴撶珯鍙般�恵router.ChildPosiDeviceCode}銆戝搴旂殑閫氳瀵硅薄锛屾棤娉曞垽鏂嚭搴撶珯鍙版槸鍚﹁鍗犵敤");
- }
}
- else
+ catch (Exception ex)
{
- _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鏈壘鍒扮珯鍙般�恵task.NextAddress}銆戜俊鎭紝鏃犳硶鏍¢獙绔欏彴");
+
+ throw;
}
return null;
}
@@ -274,21 +248,27 @@
stackerCraneTaskCommand.TaskNum = task.TaskNum;
stackerCraneTaskCommand.WorkType = 1;
stackerCraneTaskCommand.TrayType = 1;
- if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)//鍒ゆ柇鏄惁鏄叆搴撲换鍔�
+ if (task.TaskType == (int)TaskInboundTypeEnum.Inbound)//鍒ゆ柇鏄惁鏄叆搴撲换鍔�
{
- string[] startCodes = task.SourceAddress.Split("-");
+ Dt_StationManger dt_StationManger = _stationMangerRepository.QueryFirst(x => x.StationCode == task.SourceAddress);
- stackerCraneTaskCommand.StartRow = Convert.ToInt16(startCodes[0]);
- stackerCraneTaskCommand.StartColumn = Convert.ToInt16(startCodes[1]);
- stackerCraneTaskCommand.StartLayer = Convert.ToInt16(startCodes[2]);
+
+ string[] startCodes = dt_StationManger.StackerCraneStationCode.Split("-");
+ if (startCodes.Length == 3)
+ {
+ stackerCraneTaskCommand.StartRow = Convert.ToInt16(startCodes[0]);
+ stackerCraneTaskCommand.StartColumn = Convert.ToInt16(startCodes[1]);
+ stackerCraneTaskCommand.StartLayer = Convert.ToInt16(startCodes[2]);
+ }
+
string[] targetCodes = task.TargetAddress.Split("-");
- if (targetCodes.Length == 3)
+ if (targetCodes.Length == 5)
{
- stackerCraneTaskCommand.EndRow = Convert.ToInt16(targetCodes[0]);
- stackerCraneTaskCommand.EndColumn = Convert.ToInt16(targetCodes[1]);
- stackerCraneTaskCommand.EndLayer = Convert.ToInt16(targetCodes[2]);
+ stackerCraneTaskCommand.EndRow = Convert.ToInt16(targetCodes[1]);
+ stackerCraneTaskCommand.EndColumn = Convert.ToInt16(targetCodes[2]);
+ stackerCraneTaskCommand.EndLayer = Convert.ToInt16(targetCodes[3]);
}
else
{
@@ -298,21 +278,22 @@
}
}
- else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
+ else if (task.TaskType == (int)TaskOutboundTypeEnum.Outbound)
{
+ Dt_StationManger dt_StationManger = _stationMangerRepository.QueryFirst(x => x.StationCode == task.TargetAddress);
- string[] targetCodes = task.TargetAddress.Split("-");
+ string[] targetCodes = dt_StationManger.StackerCraneStationCode.Split("-");
stackerCraneTaskCommand.EndRow = Convert.ToInt16(targetCodes[0]);
stackerCraneTaskCommand.EndColumn = Convert.ToInt16(targetCodes[1]);
stackerCraneTaskCommand.EndLayer = Convert.ToInt16(targetCodes[2]);
string[] sourceCodes = task.SourceAddress.Split("-");
- if (sourceCodes.Length == 3)
+ if (sourceCodes.Length == 5)
{
- stackerCraneTaskCommand.StartRow = Convert.ToInt16(sourceCodes[0]);
- stackerCraneTaskCommand.StartColumn = Convert.ToInt16(sourceCodes[1]);
- stackerCraneTaskCommand.StartLayer = Convert.ToInt16(sourceCodes[2]);
+ stackerCraneTaskCommand.StartRow = Convert.ToInt16(sourceCodes[1]);
+ stackerCraneTaskCommand.StartColumn = Convert.ToInt16(sourceCodes[2]);
+ stackerCraneTaskCommand.StartLayer = Convert.ToInt16(sourceCodes[3]);
}
else
{
@@ -322,14 +303,14 @@
}
}
- else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup)
+ else if (task.TaskType == (int)TaskRelocationTypeEnum.Relocation) //鍒ゆ柇绉诲簱浠诲姟
{
string[] targetCodes = task.NextAddress.Split("-");
- if (targetCodes.Length == 3)
+ if (targetCodes.Length == 5)
{
- stackerCraneTaskCommand.EndRow = Convert.ToInt16(targetCodes[0]);
- stackerCraneTaskCommand.EndColumn = Convert.ToInt16(targetCodes[1]);
- stackerCraneTaskCommand.EndLayer = Convert.ToInt16(targetCodes[2]);
+ stackerCraneTaskCommand.EndRow = Convert.ToInt16(targetCodes[1]);
+ stackerCraneTaskCommand.EndColumn = Convert.ToInt16(targetCodes[2]);
+ stackerCraneTaskCommand.EndLayer = Convert.ToInt16(targetCodes[3]);
}
else
{
@@ -338,11 +319,11 @@
return null;
}
string[] sourceCodes = task.CurrentAddress.Split("-");
- if (sourceCodes.Length == 3)
+ if (sourceCodes.Length == 5)
{
- stackerCraneTaskCommand.StartRow = Convert.ToInt16(sourceCodes[0]);
- stackerCraneTaskCommand.StartColumn = Convert.ToInt16(sourceCodes[1]);
- stackerCraneTaskCommand.StartLayer = Convert.ToInt16(sourceCodes[2]);
+ stackerCraneTaskCommand.StartRow = Convert.ToInt16(sourceCodes[1]);
+ stackerCraneTaskCommand.StartColumn = Convert.ToInt16(sourceCodes[2]);
+ stackerCraneTaskCommand.StartLayer = Convert.ToInt16(sourceCodes[3]);
}
else
{
--
Gitblit v1.9.3